欢迎来到飞鸟慕鱼博客,开始您的技术之旅!
当前位置: 首页知识笔记正文

重载赋值运算符

终极管理员 知识笔记 118阅读

赋值运算符重载函数要避免自赋值吗?

答:Ⅺ.赋值运算符重载函数要避免自赋值 对于赋值运算符重载函数,我们要避免自赋值情况(即自己给自己赋值)的发生,一般地,我们通过比较赋值者与被赋值者的地址是否相同来判断两者是否是同一对象(正如例1中的if (this != &str)一句)。 为什么要避免自赋值呢?

编译器可以重载赋值运算符吗?

答:即使我们没有显式的重载赋值运算符,编译器也会以默认地方式重载它。. 默认重载的赋值运算符功能很简单,就是将原有对象的所有成员变量一一赋值给新对象,这和默认拷贝构造函数的功能类似。. 对于简单的类,默认的赋值运算符一般就够用了,我们也没有必要再显式地重载它。. 但是当类持有其它资源时,例如动态分配的内存、打开的文件、指向其他数据的 指针 、网络连接等,默认的赋值运算符就不能处理了,我们必须显式地重载它,这样才能将原有对象的所有数据都赋值给新对象。. 仍然以上节的 Array 类为例,该类拥有一个指针成员,指向动态分配的内存。. 为了让 Array 类的对象之间能够正确地赋值,我们必须重载赋值运算符。. 请看下面的代码:.

赋值运算符重载函数可以返回*this指针吗?

答:C++规定,赋值运算符重载函数只能是类的非静态的成员函数,不能是静态成员函数,也不能是友元函数。 关于原因,有人说,赋值运算符重载函数往往要返回*this,而无论是静态成员函数还是友元函数都没有this指针。

c++赋值运算符重载函数能被继承吗?

答:因为相较于基类,派生类往往要添加一些自己的数据成员和成员函数,如果允许派生类继承基类的赋值运算符重载函数,那么,在派生类不提供自己的赋值运算符重载函数时,就只能调用基类的,但基类版本只能处理基类的数据成员,在这种情况下,派生类自己的数据成员怎么办? 所以,C++规定,赋值运算符重载函数不能被继承。

声明:无特别说明,转载请标明本文来源!