【C++】多态及其对象模型
来源:互联网 发布:男士 爽肤水 知乎 编辑:程序博客网 时间:2024/06/06 01:09
多态
多态是面向对象程序设计的重要特征之一,在C++中多态可以这样定义:同一操作作用于不同类的实例,将产生不同的执行结果。也就是说,不同的类的对象收到相同的消息时,得到不同的结果。
【**多态的对象模型】–单继承&多继承
虚表剖析
虚表是通过一块连续内存来存储虚函数的地址。
单继承
首先我们先写一个可以打印虚表的函数
//该函数只能在32位平台下打印虚表typedef void(*V_FUNC)(); //定义一个无参返回值为空的函数指针V_FUNvoid PrintVtable(int* vtable){ int* vArray =(int*) vtable; printf("vtable:0x%p\n", vArray); for (size_t i = 0; vArray[i] != 0; i++) //在vs下虚表结束的标志是=0 { printf("vtable[%d]:.0x%x->", i, vArray[i]); V_FUNC f = (V_FUNC)vArray[i]; f(); } cout << endl;}下面函数在32位/64位平台都适用typedef void(*V_FUNC)(); void PrintVtable(void* vtable){ printf("vtable:0x%p\n", vtable); V_FUNC* vArray =(V_FUNC*) vtable; for (size_t i = 0; vArray[i] != 0; i++) { printf("vtable[%d]:.0x%x->", i, vArray[i]); vArray[i](); } cout << endl;}
多继承
多态的对象模型–菱形继承和菱形虚拟继承
菱形继承
class A{public: virtual void fun1() { cout << "A::fun1()" << endl; } virtual void fun2() { cout << "A::fun2()" << endl; }public: int _a;};class B:public A{public: virtual void fun1() { cout << "B::fun1()" << endl; } virtual void fun3() { cout << "B::fun3()" << endl; }public: int _b;};class C:public A{public: virtual void fun1() { cout << "C::fun1()" << endl; } virtual void fun3() { cout << "C::fun3()" << endl; }public: int _c;};class D :public B,public C{public: virtual void fun1() { cout << "C::fun1()" << endl; } virtual void fun5() { cout << "C::fun4()" << endl; }public: int _d;};
菱形虚继承
class A{public: virtual void fun1() { cout << "A::fun1()" << endl; } virtual void fun2() { cout << "A::fun2()" << endl; }public: int _a;};class B:virtual public A{public: virtual void fun1() { cout << "B::fun1()" << endl; } virtual void fun3() { cout << "B::fun3()" << endl; }public: int _b;};class C:virtual public A{public: virtual void fun1() { cout << "C::fun1()" << endl; } virtual void fun3() { cout << "C::fun3()" << endl; }public: int _c;};class D : public B, public C{public: virtual void fun1() { cout << "C::fun1()" << endl; } virtual void fun5() { cout << "C::fun4()" << endl; }public: int _d;};
阅读全文
3 0
- 【C++】多态及其对象模型
- 多态及其对象模型
- 多态及其对象模型
- C++多态及其对象模型
- 【c++】多态&多态对象模型
- C++_多态&多态的对象模型
- 多态对象模型
- Objective-C对象模型
- Objective-C对象模型
- objective C 对象模型
- C ++ 对象模型
- Objective-C 对象模型
- 【C++】对象模型
- Objective-C对象模型
- DOM模型中的常用对象及其方法?
- 多态&多态对象模型
- 多态&多态对象模型
- 多态&多态对象模型
- Bitmap类用法 详细说明
- 正则校验手机号
- 数据库元数据的学习
- Main函数中的参数argc,argv的使用详解
- 枚举与switch字符串
- 【C++】多态及其对象模型
- jsp与servlet联合处理
- Hdu1997汉诺塔VII
- Oracle 数据库 练习题6
- BZOJ 2527 Meteors (整体二分)
- ZCMU-1018: 突击战
- gdb调试乱序,value optimized out解决方法
- 推送微信模板消息
- 数组翻转