C++构造函数中不调用虚函数的原因

今天在看网上一篇帖子的时候看到这个问题,试讲关于C++对象虚函数表和类型信息的(RTTI)的,正好看到了如下内容:

这个是为什么在构造函数中不能调用虚函数的原因 .因为任何时候在基类中的虚函数调用,都不可能到达子类的实现,因为子类的虚表初始化是在调用完基类的构造之后发生的因此在基类中调用虚函数永远只能调用到自己的实现或者更基类的实现,不可能跳转到子类的实现.

也就是说,如果你本类的构造函数中调用了虚函数,那么也只能调用到你本类和你上层基类中的虚函数,而不可能调到你派生类中的虚函数实现。

因为构造函数的调用要么是new一个本类对象,要不就是在new派生类的时候调用你本类的构造函数。

而在派生类中调用你本类构造函数的时候,该类(派生类)对象的虚函数表指针还只是指向了基类(也就是你写的类)的虚函数表,因此,通过该虚函数表,你无法调用到派生类对象自己的虚函数,只有到基类构造函数完成的以后,虚函数表的指针才指向到派生类的自己的虚函数表。


附上原文地址:http://blog.sina.com.cn/s/blog_41299a970101fzfz.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值