赞
踩
using namespace std; class A { public: A() { fun(); } virtual void fun() { cout << "A fun" << endl; } }; class B :public A { public: B() { fun(); } virtual void fun() { cout << "B fun" << endl; } }; void main() { B b; }
首先:虚函数的调用,只需要部分信息,而不需要具体对象的类型;同时,在编译期间无法确定调用哪个虚函数,运行期间才确认;
但是构造对象,需要知道具体类型信息,在编译期间要确定;两者冲突。
另一点,构造函数不在继承体系中,所以构造函数为虚函数也无法实现多态,所以没有意义;
- 如果可以虚拟构造,那么虚构造调用的时候,编译器怎么会知道该调用继承关系中哪个构造函数呢?(“虚” 就是运行期间才能确定的东西)
- 当然也存在某些语言支持虚构造;但是是在语言层面就解决了这个问题;(Delphi)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。