构造函数为何不能为虚函数
2013-05-30 19:55
232 查看
文章部分转自:http://blog.csdn.net/lmsnju/article/details/5386617
构造函数不能声明为虚函数的原因是:
解释一:
所谓虚函数就是多态情况下只执行一个。而从继承的概念来讲,总是要先构造父类对象,然后才能是子类对象。如果构造函数设为虚函数,那么当你在构造父类的构造函数时就不得不显示的调用构造。还有一个原因就是为了防错,试想如果你在子类中一不小心重写了个跟父类构造函数一样的函数,那么你的父类的构造函数将被覆盖,也即不能完成父类的构造.就会出错。
解释二:
虚函数对应一个vtable,这大家都知道,可是这个vtable其实是存储在对象的内存空间的。问题出来了,如果构造函数是虚的,就需要通过
vtable来调用,可是对象还没有实例化,也就是内存空间还没有,怎么找vtable呢?所以构造函数不能是虚函数。
构造函数不能声明为虚函数的原因是:
解释一:
所谓虚函数就是多态情况下只执行一个。而从继承的概念来讲,总是要先构造父类对象,然后才能是子类对象。如果构造函数设为虚函数,那么当你在构造父类的构造函数时就不得不显示的调用构造。还有一个原因就是为了防错,试想如果你在子类中一不小心重写了个跟父类构造函数一样的函数,那么你的父类的构造函数将被覆盖,也即不能完成父类的构造.就会出错。
解释二:
虚函数对应一个vtable,这大家都知道,可是这个vtable其实是存储在对象的内存空间的。问题出来了,如果构造函数是虚的,就需要通过
vtable来调用,可是对象还没有实例化,也就是内存空间还没有,怎么找vtable呢?所以构造函数不能是虚函数。
相关文章推荐
- 构造函数为何不能为虚函数?
- C++中为什么构造函数不能是虚函数,析构函数是虚函数
- 【C++】构造函数不能是虚函数
- 为什么构造函数不能声明为虚函数,析构函数可以
- 构造函数为何是唯一一个不能为虚的函数
- 构造函数为什么不能是虚函数
- 构造函数不能为虚函数,析构函数可为虚函数
- 构造函数为什么不能是虚函数
- 构造函数不能声明为虚函数的原因及分析
- 为什么构造函数不能是虚函数
- 为什么构造函数不能为虚函数
- 构造函数为什么不能是虚函数
- 为什么构造函数不能为虚函数
- 构造函数为什么不能是虚函数
- 为什么构造函数不能是虚函数
- 构造函数为什么不能是虚函数?
- 内联函数,构造函数,静态函数都不能是虚函数
- 为什么构造函数不能声明为虚函数,析构函数可以
- C++构造函数虚拟化 一般情况下构造函数不能是虚函数 这是个特例
- 构造函数为什么不能是虚函数