Я пытаюсь создать библиотеку для некоторой работы и использую перегрузку оператора для операции присваивания.Предположим, 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.
Если это так, может кто-нибудь предложитьспособ вызвать перегрузку оператора для п.
Спасибо.