c++virtual的动态调用验证
来源:互联网 发布:金鼎娱乐源码下载 编辑:程序博客网 时间:2024/06/07 09:51
来看一个例子
#include <iostream>#include <string>using namespace std;class Base {public: void func1(string prefix); void func2(string prefix); void func3(string prefix);};void Base::func1(string prefix) { cout << prefix << "A::func1" << endl;};void Base::func2(string prefix) { cout << prefix << "A::func2" << endl; func1(prefix + " ");}void Base::func3(string prefix) { cout << prefix << "A::func3" << endl;}class Derived: public Base {public: void func1(string prefix); void func3(string prefix);};void Derived::func1(string prefix) { cout << prefix << "B::func1" << endl;}void Derived::func3(string prefix) { cout << prefix << "B::func3" << endl; Base::func3(prefix + " "); func1(prefix + " "); func2(prefix + " ");}
测试用例:
Derived test;test.func3("");
打印结果:
B::func3 A::func3 B::func1 A::func2 A::func1
结论:可以看出,没有加virtual的函数,在编译期已经确定了函数的地址。
如果在Base类的func1定义中加上virtual,改成 virtual void func1(string prefix);
打印结果会是:
B::func3 A::func3 B::func1 A::func2 B::func1
结论:有virtual的函数,会在运行期动态寻找函数。
文章参考:http://www.cnblogs.com/waytofall/archive/2012/07/09/2583645.html
阅读全文
0 0
- c++virtual的动态调用验证
- 验证virtual函数的原理
- non-virtual函数的调用
- C#动态调用c++DLL的方法
- C语言调用C++的动态库
- C#动态调用c++DLL的方法
- C++调用C生成的动态库
- C/C++动态库的调用
- C调用自己写的动态库
- C调用GO的动态链接库
- C函数的DLL,C++动态调用。
- C#动态调用带有SoapHeader验证的WebServices
- 动态调用WebService(C#)
- 动态调用WebService(C#)
- 动态调用WebService(C#)
- 动态调用WebService(C#)
- 动态调用WebService(C#)
- 动态调用WebService(C#)
- A. K-Periodic Array----思维
- Python高级
- 剑指OFFER--二进制中1的个数
- c# RichTextBox用法——设置指定字符串的颜色
- 函数指针与回调函数的用法
- c++virtual的动态调用验证
- 线程状态及属性
- struts2--struts2标签库(部分)
- 【并查集入门专题1】poj1182【带权值的并查集】【思维思维~~】
- Ubuntu16.04 安装MySQL全过程~
- ReLu(Rectified Linear Units)激活函数
- 记录下 Java 中对于 String 的 replace() 方法使用不当
- MySQL索引资料总结
- 《程序员的修炼之道》笔记——注重实效的哲学