多态中虚函数表的地址是所有对象共享的
2013-04-15 15:28
197 查看
// vtabPtrShared.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <iostream> using namespace std; //多态中虚函数表的地址是所有对象共享的 class parent{ public: virtual void test(){ cout << "from parent " <<endl; } }; class son1:public parent{ public: virtual void test(){ cout << "from son1 " <<endl; } }; class son2:public parent{ public: virtual void test(){ cout << "from son2 " <<endl; } }; int _tmain(int argc, _TCHAR* argv[]) { son1 s1; son2 s2; parent& p=s1; p.test(); s1.test(); p=s2; //(1)没有改变 p.test(); { son1 * s1=new son1; son2 * s2=new son2; parent* p=s1; p->test(); p=s2; //(1)没有改变 p->test(); } int j=1, k=2; int & i = j; cout <<i<<","<<j <<endl; i = k; //(2)却改变了 cout <<i<<","<<j <<endl; return 0; } /* 输出结果: from son1 from son1 from son1 from son1 from son2 1,1 2,2 请按任意键继续. . . 如果理解了在多态中虚函数表的地址是所有对象共享的。 对这个结果就不会困惑。 */
相关文章推荐
- 多态中虚函数表的地址是所有对象共享的
- 函数指针类的虚函数表是一块连续的内存,每个内存单元中记录一个JMP指令的地址。 注意的是,编译器会为每个有虚函数的类创建一个虚函数表,该虚函数表将被该类的所有对象共享。类的每个虚成员占据虚函数表中的一
- C++单个类的所有对象是否共享虚函数表的验证
- 静态函数里定义的变量,不为所有对象共享,类的静态变量和类外全局变量区别,静态函数和普通函数区别
- C/C++指针,多态,函数参数,面向对象抽象
- jQuery扩展函数设置所有对象只读
- Delphi与C++之间通过实现函数与对象共享
- 对象作为函数参数时调用拷贝构造函数、引用做函数参数时只是传递地址
- js 获取函数的所有参数和遍历JavaScript某个对象所有的属性名称和值的方法
- 多态继承情况下,有一个基类指针指向派生类对象,如何用它调用基类的虚函数?
- 使用js内置对象arguments求函数的所有参数的和
- 如何动态保存不同类的对象的成员函数的地址?--解决(续)
- 在Delphi与C++之间实现函数与对象共享
- ArcGIS Engine代码共享-颜色(Color)对象函数
- 使用单独的命令处理类来处理命令消息(适用于有很多命令处理函数的对象,以及共享命令处理函数)
- 显示js对象所有属性和方法的函数
- 属性函数php 获取对象所有属性(仅公有属性)
- 所有对象共享一个方法吗?
- js 获取函数的所有参数和遍历JavaScript某个对象所有的属性名称和值的方法
- 显示js对象所有属性和方法的函数