为什么构造函数不能为虚函数(转)
来源:互联网 发布:单机进销存软件免费版 编辑:程序博客网 时间:2024/06/15 11:57
1
从存储空间角度
虚函数对应一个vtable,这大家都知道,可是这个vtable其实是存储在对象的内存空间的。问题出来了,如果构造函数是虚的,就需要通过 vtable来调用,可是对象还没有实例化,也就是内存空间还没有,无法找到vtable,所以构造函数不能是虚函数。
2
从实现上看,vbtl在构造函数调用后才建立,因而构造函数不可能成为虚函数
从实际含义上看,在调用构造函数时还不能确定对象的真实类型(因为子类会调父类的构造函数);而且构造函数的作用是提供初始化,在对象生命期只执行一次,不是对象的动态行为,也没有太大的必要成为虚函数
3
当一个构造函数被调用时,它做的首要的事情之一是初始化它的V P T R。因此,它只能知道它是“当前”类的,而完全忽视这个对象后面是否还有继承者。当编译器为这个构造函数产生代码时,它是为这个类的构造函数产生代码- -既不是为基类,也不是为它的派生类
4
构造函数不需要是虚函数,也不允许是虚函数,因为创建一个对象时我们总是要明确指定对象的类型,尽管我们可能通过实验室的基类的指针或引用去访问它。但析构却不一定,我们往往通过基类的指针来销毁对象。这时候如果析构函数不是虚函数,就不能正确识别对象类型从而不能正确调用析构函数。
5
从使用角度
虚函数主要用于在信息不全的情况下,能使重载的函数得到对应的调用。构造函数本身就是要初始化实例,那使用虚函数也没有实际意义呀。所以构造函数没有必要是虚函数。
虚函数的作用在于通过父类的指针或者引用来调用它的时候能够变成调用子类的那个成员函数。而构造函数是在创建对象时自动调用的,不可能通过父类的指针或者引用去调用,因此也就规定构造函数不能是虚函数。
转自:http://blog.sina.com.cn/s/blog_620882f401016ri2.html
- 为什么构造函数不能为虚函数
- 为什么构造函数不能为虚函数
- 为什么构造函数不能为虚函数
- 构造函数为什么不能为虚函数
- 为什么构造函数不能为虚函数
- 为什么构造函数不能为虚函数
- 为什么构造函数不能为虚函数
- 为什么构造函数不能为虚函数
- 为什么构造函数不能为虚函数
- 为什么构造函数不能为虚函数
- 为什么构造函数不能为虚函数
- 为什么构造函数不能为虚函数
- 为什么构造函数不能为虚函数
- 为什么构造函数不能为虚函数
- 为什么构造函数不能为虚函数
- 构造函数为什么不能为虚函数
- 为什么构造函数不能为虚函数(转)
- 为什么构造函数不能声明为虚
- 免费馅饼 hdu dp
- MRC工程改为ARC
- 关于存储过程中,使用mod取余的函数
- 关于二维数组和二维指针的理解总结
- 杭电2531Catch him
- 为什么构造函数不能为虚函数(转)
- C语言_根据用户输入确定新建的数组大小
- oracle存储过程实例
- Java网络(Socket编程)详解
- 如何提高jQuery的性能探讨
- 计算机中的一些单位及其换算关系
- IPickerView
- fedora 22 截图
- PHP面向对象1.1简单的介绍