Мне сложно определить, как работает перегрузка оператора присваивания. У меня есть класс с именем MyClass:Как работает перегрузка оператора для оператора присваивания?
class myClass {
public:
myClass();
myClass& operator+(const myClass& rhs);
myClass& operator=(const myClass& rhs);
myClass& operator+=(const myClass& rhs);
myClass& return_myClass(std::vector<bool> vector);
void print_vector() const;
private:
std::vector<bool> bit;
};
myClass& myClass::operator=(const myClass& rhs) {
int bitA = this->bit.size();
int bitB = rhs.bit.size();
int length;
std::vector<bool> return_vector;
if (bitA > bitB) {
length = bitA;
} else {
length = bitB;
}
for (int i = 0; i < length; ++i) {
return_vector[i] = rhs.bit[i];
}
return return_myClass(return_vector);
}
int main() {
// declare a and b
myClass plus += a + b; plus.print_vector();
return 0;
}
Я пропустил много кода, но я думаю, вы получите общее представление. Когда я запускаю программу, я получаю сообщение об ошибке «Thread 1: EXC_BAD_ACCESS». Оператор +, а также другие функции работают правильно, поэтому я предполагаю, что с оператором что-то не так. Я хочу объединить операторы + и =, чтобы сделать оператор + =, но я не могу заставить оператор = работать.
Обратите внимание, что логика, которую я набрал, должна выполняться, то есть назначение должно выполняться на векторе, а затем должно быть возвращено как объект myClass с использованием return_myClass.
Оператор присваивания не вызывается, потому что 'myClass plus = a + b;' не является назначением. – Oktalist
'return_myClass' очень подозрительно. Где он возвращает «myClass» по ссылке? Вы не можете сделать 'return_vector [i]' на пустой вектор. – aschepler
'myClass plus + = a + b;' даже не компилируется. – aschepler