c++重载操作符

来源:百度知道 编辑:UC知道 时间:2024/06/17 03:02:33
假定M是一个类名,且M中重载了操作符=,可以实现M对象间的,连续赋值,如“m1=m2=m3”。重载操作符=的函数原型最好是:
A: int operator=(M); B: int operator=(M&);
C: M operator=(M&); D: M& operator=(M);
答案是(D) 告诉我原因。。。。

是选项D,类应该是这样的:class M
{
public:
M();
M(const M&);
M&operator=(const M&)括号中的参数和第二个复制初等函数中的参数是一样的。

按值返回是返回一个临时对象。
按引用返回是返回该对象的内存地址。

赋值操作符的重载可以返回原类型,也可以返回原类型的一个引用。本题之所以返回的是原类型的引用是因为它用到了连等,即“m1=m2=m3”。至于传的参数m可以是传引用类型的,也可以按值传递,不同的是,按引用的话效率要高一点,因为相当于传递的是形参的常量指针;按值传递的话是传递的形参的一个拷贝(副本),如果类型M的对象比较大(比如说一个窗口类型)的话,按引用调用效率会很低。
还有什么不懂的可以问。

应该选C,赋值操作符应该返回右值。const M& operator=(const M&); 更好。