Доступ к значениям массива в классе, c ++ - PullRequest
0 голосов
/ 29 сентября 2019

Я реализую набор в C ++, используя массив, в котором элементы со значениями 0 отсутствуют в наборе, а элементы с 1 - в наборе. Например, если мой набор равен {1,5}, мой массив будет выглядеть так: [0, 1, 0, 0, 0, 1]. Я перегружаю оператор "/", чтобы показать разницу между множествами, поэтому, если x находится в множестве A, а x не в множестве B, то x находится в A / B. Я передаю второй объект Set перегруженной функции по ссылке, но не могу получить доступ к его переменной-члену "arr", в которой хранится массив.

Это заголовочный файл:

class Set
{
public:
    Set();
    virtual ~Set();
    Set(int);
    int* arr;
    int len;
    Set operator/(const Set&);
    friend ostream& operator<<(ostream&, const Set&);
    int* getArray() const;
};

А вот и файл .cpp:

Set::Set(int n) {
    arr = new int[n+1];
    len = n+1;
}

Set Set::operator/(const Set &s){
    int* arr2 = s.getArray();
    for (int i = 0; i < this->len; i++) {
        if (this->arr[i] == 1) {
            if (arr2[i] == 0) {
                this->arr[i] = 1;
            }
            else {
                this->arr[i] = 0;
            }
        }
    }
    return *this;
}

int* Set::getArray() const { return arr; }

Если я попытаюсь напечатать значения arr2, я получу значения, которые кажутся адресами. Как мне получить доступ к фактическим значениям arr2?

Редактировать: Я не изучил «Правило 3» ни в одном из классов, которые я выбрал, поэтому я не понимаю, как это может заставить мой код не работать. Я только что провел некоторые исследования, но я был бы признателен за краткое объяснение того, как реализовать это в этом случае. Кроме того, мне запрещено использовать контейнеры, поэтому я не могу использовать вектор, как предлагается в комментариях.

...