C++的虚函数相关知识点(二)

2. 以下几种情况下虚函数的特性将失效

1)派生类没有重写该函数;

2)使用基类对象(包括将派生类强制转换成基类对象)调用虚函数;

示例代码如下:

其运行结果如下:

This is derivel
This is base

 

延伸知识点:强制类型转换将会在调用前生成一个临时目标类型的对象,调用完成后自动释放(析构)临时对象,示例代码如下:

运行结果如下:

未命名对象诞生了!
This is derivel
未命名对象的拷贝诞生了!
This is base
未命名对象的拷贝去了!
This is derivel
未命名对象去了!

 

3)在构造函数或析构函数中调用的虚函数与普通函数的调用规则相同,因为构造函数或析构函数只管当前类的构造或析构,在执行基类的构造函数时,派生类还未能完成构造,在执行基类的析构函数时,派生类对象已被析构了。

示例代码如下:

运行结果如下:

以下是在基类的构造函数中调用虚函数:
base::vf()
以下是在main函数中直接调用虚函数:
deriver::vf()
以下是在基类的普通函数中调用虚函数:
deriver::vf()
以下是在基类的析构函数中调用虚函数:
base::vf()

 

4)当明确指定函数的所属类时(使用“类名::函数名”方式调用时),将只调用指定函数,虚函数的特性将无效。这种情况常用于派生虚函数中需要执行基类代码同名函数时。

示例代码如下:

运行结果如下:

This is base
This is derivel
This is base

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值