父类的运算符重载函数会被子类继承吗?比如赋值运算符。

创建一个子类对象,那么子类对象的赋值运算符是继承的父类的版本还是子类默认的版本?... 创建一个子类对象,那么子类对象的赋值运算符是继承的父类的版本还是子类默认的版本? 展开
 我来答
reverse_walker
2013-02-23 · TA获得超过590个赞
知道小有建树答主
回答量:377
采纳率:0%
帮助的人:465万
展开全部
class widget
{
① widget& operator=( const widget& rhs ){} // 这个叫做赋值操作符
② widget& operator=( const int ) {} // 这个叫做赋值操作符重载
} ;

①. 赋值操作符属于类的复制控制的一部分(默构,复构,赋值,析构), 自己不定义,编译器会自动合成.它的正式叫法是(copy assignment operator),强调的是属于复制控制的一部分.

②. 赋值操作符重载和赋值操作符不一样,你不定义,编译器不会自动合成.

所以你要是问子类赋值操作符会不会继承父类,那肯定是不会的.
1. 如果 子类没定义赋值操作符, 那么 子类会自动合成赋值操作符, 子类在赋值的时候会自动调用父类的赋值操作符来完成基类部分的复制拷贝.
2. 如果 子类自己定义了赋值操作符, 那么 子类就不会继续自动合成, 仍然子类必须手动调用父类的赋值操作符来完成基类部分的赋值拷贝,否则会造成部分复制( partial copy assignment )

但是你要问子类是否会继承 赋值重载运算符,那肯定会.
而且 赋值重载运算符 就和普通函数一样,能够呈现多态行为,
但是 赋值操作符不可能出现多态,因为它不可能是虚函数,虚函数要求函数的签名必须一样(除了返回值).

重载叫做overloading,他在C++中的意思是重新定义一个操作符的语义.
在①中,赋值操作符永远都和同类对象进行赋值拷贝,根本不存在重新定义一个新的语义.
而在②中,可以定义op=( int ), op=(double), op=(gadget),重新定义op=(),使得widget类分别和int, double, gadget对象的赋值有意义.
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式