Я реализую набор в 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» ни в одном из классов, которые я выбрал, поэтому я не понимаю, как это может заставить мой код не работать. Я только что провел некоторые исследования, но я был бы признателен за краткое объяснение того, как реализовать это в этом случае. Кроме того, мне запрещено использовать контейнеры, поэтому я не могу использовать вектор, как предлагается в комментариях.