在构造函数中调用虚函数
来源:互联网 发布:choice数据 价格 编辑:程序博客网 时间:2024/06/02 13:00
一般地,父类指针new一个子类对象,通过调用虚函数可以实现多态,以调用不同的子类方法。
但是在构造函数中调用虚函数则会不同。下面是例子:
class A{public:A(){cout << "A::A()" << endl;Foo();}virtual void Foo(){cout << "A::Foo()" << endl;}void Foo2(){cout << "A::Foo2()" << endl;Foo();}};class B : public A{public:B(){cout << "B::B()" << endl;Foo();}virtual void Foo(){cout << "B::Foo()" << endl;}};int _tmain(int argc, _TCHAR* argv[]){cout << "test1:" << endl;A* pA = new B;cout << endl << "test2:" << endl;pA->Foo2();return 0;}
调用结果如下:
test1:A::A()A::Foo()B::B()B::Foo()test2:A::Foo2()B::Foo()请按任意键继续. . .
可以看出,在父类构造时并不会调用子类的Foo()方法。而在调用A::Foo2()函数调用时则能够正常调用到派生类的Foo()方法。
其实,此时,构造A时,子类并没有完成构造动作,如果此时调用,可能会发生不可预料的错误,因此会做此限制。
所以,如果想要实现多态,还是等到初始化完成后,例如构建一个Create()方法来实现软创建,在其中实现不同的方法。
- 在构造函数中调用虚函数
- 在构造函数中调用虚函数
- 在构造函数中调用构造函数
- 在构造函数中调用构造函数
- 在构造函数/析构函数中调用虚函数
- 在构造函数/析构函数中调用虚函数
- 在成员函数中调用构造函数
- 不要在构造函数中调用虚函数
- 为什么不要在构造函数中调用虚函数
- 为什么不要在构造函数中调用虚函数
- 在子类的构造函数中调用虚函数
- 为什么不要在构造函数中调用虚函数
- 为什么不要在构造函数中调用虚函数
- 为什么不要在构造函数中调用虚函数
- 为什么不要在构造函数中调用虚函数
- 为什么不要在构造函数中调用虚函数
- 为什么不要在构造函数中调用虚函数
- 禁止:C++在构造函数中调用构造函数
- 【2】GridView 宫格视图
- 开启博客之路
- 编译器的编译模板过程
- EF 正在运行转换: System.Reflection.TargetInvocationException: 调用的目标发生了异常。
- 设置Bundle display name 与 Bundle name
- 在构造函数中调用虚函数
- 数组排序以及所需时间。。
- CSS3 多列
- 【转载】ecshop模板如何修改详细图解
- Hadoop工具生态系统指南
- 【转载】ecshop lang用法
- ECshop 商品属性后台添加,前台显示
- ECshop 修改100例
- 其他网站看来的20条找工作经验