首页 > 其他 > 详细

构造函数,赋值操作符不应该是虚函数

时间:2014-02-12 11:13:31      阅读:285      评论:0      收藏:0      [点我收藏+]

在有继承层次类的时候,我们已经知道析构函数应该是虚函数,但很多人对构造函数和赋值操作符应不应该是虚函数并不清楚。

首先,构造函数不能是虚函数,因为构造函数是在对象完全构造之前运行的,在构造函数运行的时候,对象的动态类型还不完整。

对于赋值操作符,虽然可以在基类中将成员函数operator=定义成虚函数,但这样做并不会影响派生类中赋值操作符的使用。因为每个类有自己的赋值操作符。每个类的赋值操作符都有一个和类本身类型相同的形参,该类型必须不同于继承层次中任意其他类的赋值操作符的形参类型。因此子类的赋值操作符和基类的赋值操作符并不是同一个。但是,在这个子类中仍然有基类的那个操作符,但不是赋值操作符。

将赋值操作符设为虚函数容易让人混淆,因为虚函数必须在基类和派生类中具有相同的形参,基类赋值操作符有一个形参是自身类类型的引用,如果该操作符为虚函数,则每个类都将得到一个虚函数成员,该成员定义了参数为一个基类对象的operator=。但是,对于派生类而言,这个操作符与赋值操作符是不同的。

因此,将赋值操作符设为虚函数很容易令人混淆,并且没有什么用处。

构造函数,赋值操作符不应该是虚函数

原文:http://www.cnblogs.com/xiezhw3/p/3545231.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!