构造函数和赋值操作符不是虚函数
2012-09-07 10:14
232 查看
在复制控制函数中,只有析构函数应定义为虚函数,构造函数不能定义为虚函数。构造函数是在对象完全构造之前运行的,在构造
函数运行的时候,对象的动态类型还不完整。
虽然可以在基类中将成员函数operator=定义为虚函数,但这样做并不影响派生类中使用的赋值操作符。每个类有自己的赋值操作符,
派生类中的赋值操作符有一个与类本身类型相同的形参, 该类型必须不同于继承层次中任意其他类的赋值操作符的形参类型。
将赋值操作符设为虚函数可能会令人混淆,因为虚函数必须在基类和派生类中具有同样的形参。基类赋值操作符有一个形参是自身类
类型的引用,如果该操作符为虚函数,则每个类都将得到一个虚函数成员,该成员定义了一个基类对象的operator=。但是,对派生类而言,
这个操作符与赋值操作符是不同的。
ps:将类的赋值操作符设为虚函数很可能会令人混淆,而且不会有什么用处
摘在《C++primer》第三版 构造函数和赋值操作符不是虚函数 496页
函数运行的时候,对象的动态类型还不完整。
虽然可以在基类中将成员函数operator=定义为虚函数,但这样做并不影响派生类中使用的赋值操作符。每个类有自己的赋值操作符,
派生类中的赋值操作符有一个与类本身类型相同的形参, 该类型必须不同于继承层次中任意其他类的赋值操作符的形参类型。
将赋值操作符设为虚函数可能会令人混淆,因为虚函数必须在基类和派生类中具有同样的形参。基类赋值操作符有一个形参是自身类
类型的引用,如果该操作符为虚函数,则每个类都将得到一个虚函数成员,该成员定义了一个基类对象的operator=。但是,对派生类而言,
这个操作符与赋值操作符是不同的。
ps:将类的赋值操作符设为虚函数很可能会令人混淆,而且不会有什么用处
摘在《C++primer》第三版 构造函数和赋值操作符不是虚函数 496页
相关文章推荐
- 构造函数,赋值操作符不应该是虚函数
- 继承中,构造函数,赋值操作符,析构函数与虚函数的关系
- C++类中的4个特殊函数 - 缺省构造函数、拷贝构造函数、拷贝赋值操作符和析构函数
- C++类中的4个特殊函数 - 缺省构造函数、拷贝构造函数、拷贝赋值操作符和析构函数
- C++类中的4个特殊函数 - 缺省构造函数、拷贝构造函数、拷贝赋值操作符和析构函数
- C++中构造函数、复制构造函数和赋值操作符
- C++在单继承、多继承、虚继承时,构造函数、复制构造函数、赋值操作符、析构函数的执行顺序和执行内容
- C++ Primer 学习笔记_54_类与数据抽象 -复制构造函数、赋值操作符
- c语言:sizeof的使用,其不是函数,是一个操作符关键字,定义一个数组arr,输出arr和&arr的区别
- C++在单继承、多继承、虚继承时,构造函数、复制构造函数、赋值操作符、析构函数的执行顺序和执行内容 【转】 参考度4.6星
- sizeof既是关键字,又是运算符(操作符),但不是函数!
- C++在单继承、多继承、虚继承时,构造函数、复制构造函数、赋值操作符、析构函数的执行顺序和执行内容 【转】 参考度4.6星
- C++在单继承、多继承、虚继承时,构造函数、复制构造函数、赋值操作符、析构函数的执行顺序和执行内容
- C++构造函数的初始化列表和函数体内赋值有什么不同?
- 编写合适的构造函数、拷贝构造函数、赋值操作符、析构函数(后三者一般同时出现,称为“大三元法则”),那么这个概念就完整并且不用再考虑其资源(内存)管理的问题。
- 批注:C++中复制构造函数与重载赋值操作符总结:默认浅拷贝,带指针的需要深拷贝
- 牛客_{}大括号里面的内容都会执行,如果它不是成员函数的时候,看成是构造函数中的方法;
- C++在单继承、多继承、虚继承时,构造函数、复制构造函数、赋值操作符、析构函数的执行顺序和执行内容
- 关于基类构造函数调用虚函数实际调用的不是派生类的问题的原因
- sizeof不是函数,是操作符