标签:color struct 代码 函数地址 ast 结构 函数 test 一个
? 在C++编译器的内部类可以理解为结构体
? 子类是由父类成员叠加子类新成员得到的
【范例代码】继承对象模型初探
1 #include <iostream> 2 #include <string> 3 4 using namespace std; 5 6 class Demo { 7 protected: 8 int mi; 9 int mj; 10 public: 11 virtual void print() { 12 cout << "mi = " << mi << ", " 13 << "mj = " << mj << endl; 14 } 15 }; 16 17 class Derived : public Demo { 18 int mk; 19 public: 20 Derived(int i, int j, int k) { 21 mi = i; 22 mj = j; 23 mk = k; 24 } 25 26 void print() { 27 cout << "mi = " << mi << ", " 28 << "mj = " << mj << ", " 29 << "mk = " << mk << endl; 30 } 31 }; 32 33 // 证明Derived内存排布与Test类一样 34 struct Test { 35 void* p; 36 int mi; 37 int mj; 38 int mk; 39 }; 40 41 int main(int argc, const char* argv[]) { 42 cout << "sizeof(Demo) = " << sizeof(Demo) << endl; 43 cout << "sizeof(Derived) = " << sizeof(Derived) << endl; 44 45 Derived d(1, 2, 3); 46 Test* p = reinterpret_cast<Test*>(&d); 47 48 cout << "Before changing ..." << endl; 49 50 d.print(); 51 52 p->mi = 10; 53 p->mj = 20; 54 p->mk = 30; 55 56 cout << "After changing ..." << endl; 57 58 d.print(); 59 60 return 0; 61 }
C++多态的实现原理:
? 当类中声明虚函数时,编译器会在类中生成一个虚函数表
? 虚函数表是一个存储成员函数地址的数据结构
? 虚函数表是由编译器自动生成与维护的
? virtual成员函数会被编译器放入虚函数表中
? 存在虚函数表时,每个对象中都有一个指向虚函数表的指针
void run(Demo* p, int v) { p->add(v); }
编译器确认add()是否为虚函数?
标签:color struct 代码 函数地址 ast 结构 函数 test 一个
原文地址:https://www.cnblogs.com/laoyaodada/p/9178221.html