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

来源:互联网 发布:yum search命令 编辑:程序博客网 时间:2024/05/18 22:42

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

原创粉丝点击