Я прочитал, что ссылка возвращается из перегруженного оператора присваивания, чтобы включить цепочку операторов. Но без этого возвращения также работает цепочка операторов.Почему ссылка возвращается при перегрузке оператора присваивания?
Может кто-то пролить свет на это?
class A
{
public:
int x,y;
char* str;
//Default Constructor
A(){}
//Constructor
A(int a, int b, char* s){
cout<<"initialising\n";
x = a;
y = b;
str = new char[10];
str = s;
}
//Destructor
~A(){}
//Overloaded assignment operator
const A& operator=(const A& obj)
{
cout<<"Invoking Assignment Operator\n";
x = obj.x;
y = obj.y;
str = new char[10];
str = obj.str;
//return *this;
}
};
ostream& operator<<(ostream& os, const A& obj)
{
os <<"X="<< obj.x<<" Y="<<obj.y<<" Str="<<obj.str<<"\n";
return os;
}
int main()
{
A c(3,4,"Object C");
cout<<c;
A d, e, f;
d = e = f = c; //Assignment operator invoked 3 times
cout<<e;
}
Выход:
initialising
X=3 Y=4 Str=Object C
Invoking Assignment Operator
Invoking Assignment Operator
Invoking Assignment Operator
X=3 Y=4 Str=Object C
Ваш код даже не компилируется, как он может работать? –
Вы возвращаетесь по ссылке, знаете ли вы об этом? –
@ Luchian-Его компиляция и работа отлично для меня – cppcoder