C++中虚函数和非虚函数重载在继承时的区别
来源:互联网 发布:java 高级编程 书籍 编辑:程序博客网 时间:2024/06/05 17:46
这里唯一想说明的一点就是,使用虚函数继承时,当继承类被强转成基类后调用虚函数,调用的还是继承类的虚函数。而重载方式的继承类被强转成基类再调用重载函数,则调用的是基类的函数。废话不多说,上代码:
这段代码执行的输出是:
A::fun
AP:fun
B:fun
B:fun
通过汇编分析主要的代码片段如下:
其中fun_GetAPFuns函数,就是获取AP实例被强转后的函数表地址,函数定义如下:
不难看出,针对((A*)&ap)->fun(); 这行代码调用,实际上是先获取了基类的函数表,然后又被继承类的函数表覆盖了。因此输出结果才会是AP:fun。
而对于直接重载继承的经过强转调用,在编译时就直接替换成基类的函数调用了。
FROM: http://blog.csdn.net/pendle/article/details/6574445
0 0
- C++中虚函数和非虚函数重载在继承时的区别
- C++中虚函数和非虚函数重载在继承时的区别
- C++中虚函数和非虚函数重载在继承时的区别
- 虚函数、纯虚函数与非虚函数在继承方面的区别
- 函数重载和虚函数继承
- 【C++】内联inline、继承、重载与虚函数的解释
- C++ 在继承中虚函数、纯虚函数、普通函数,三者的区别!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- C++ 在继承中虚函数、纯虚函数、普通函数,三者的区别
- C++ 在继承中虚函数、纯虚函数、普通函数,三者的区别
- C++ 在继承中虚函数、纯虚函数、普通函数,三者的区别
- C++ 在继承中虚函数、纯虚函数、普通函数,三者的区别
- C++ 在继承中虚函数、纯虚函数、普通函数,三者的区别
- C++ 在继承中虚函数、纯虚函数、普通函数,三者的区别
- C++ 在继承中虚函数、纯虚函数、普通函数,三者的区别
- 函数的重载和继承
- 函数重载和虚函数在概念和使用方式方面的区别
- C++学习笔记-----继承体系中函数的重载,覆盖和隐藏的区别
- C++的继承、隐藏、重载和虚函数
- Codeforces 455B
- poj 3259 bellman最短路判断有无负权回路
- 排序算法和查询算法的介绍
- hdoj 1905 Pseudoprime numbers
- 简单工厂,工厂模式和抽象工厂模式
- C++中虚函数和非虚函数重载在继承时的区别
- dialog相关
- oracle 异常关闭造成 -重启服务仍无法正常连接 -windows处理
- SVN提交.a文件
- Spring 入门教程(三) 注入和自动装配
- UVALive 6124 Hexagon Perplexagon
- 怀念张筑生
- Java进行3DES加密解密
- 回调函数