случаи, когда вызывается функция перегрузки оператора присваивания
аюсь создать библиотеку для некоторой работы и использую перегрузку оператора для операции присваивания. Предположим, X и Y являются двумя экземплярами класса, который имеет перегруженный =:
A& A::operator=(A &rhs)
{
A::assign(*this, rhs);
return *this;
}
Когда я делаю это:
A z;
z = x + y; // x and y are other instances of class A
все хорошо, однако, когда я делаю
A p = q + r;
перегруженная процедура не вызывается. Я не очень опытен с перегрузкой операторов, может кто-нибудь объяснить, что происходит. Одним из объяснений может быть то, что p - это просто псевдоним для созданного объекта q + r, однако z создает новый экземпляр класса A, и, следовательно, перегрузка оператора срабатывает, когда z назначается. Вроде как:
#include <iostream>
using namespace std;
class X
{
public:
X();
};
X::X()
{
cout<<"called"<<endl;
}
int main(int argc, char *argv[])
{
X e; X f;
X g = e;
}
где вызванный печатается только дважды, по одному для e и f, и не печатается для g.
Если это так, может кто-нибудь предложить способ вызвать перегрузку оператора для p.
Благодарю.