1. 示例程序1:
1 class A 2 { 3 public: 4 void f(); 5 protected: 6 private: 7 }; 8 9 class B : virtual public A 10 { 11 public: 12 protected: 13 private: 14 }; 15 16 class C : virtual public A 17 { 18 public: 19 protected: 20 private: 21 }; 22 23 class D : public B, public C 24 { 25 public: 26 protected: 27 private: 28 }; 29 30 int main() 31 { 32 std::cout << sizeof(A) << std::endl; // 1 33 std::cout << sizeof(B) << std::endl; // 4 虚继承,4字节指向虚基类部分的指针 34 std::cout << sizeof(C) << std::endl; // 4 虚继承,4字节指向虚基类部分的指针 35 std::cout << sizeof(D) << std::endl; // 8 B类部分和C类部分分别有一个4字节指向虚基类部分的指针,共8字节 36 37 return 0; 38 }
2. 示例程序2:
1 class A 2 { 3 public: 4 virtual void f(); 5 protected: 6 private: 7 }; 8 9 class B : virtual public A 10 { 11 public: 12 protected: 13 private: 14 }; 15 16 class C : virtual public A 17 { 18 public: 19 protected: 20 private: 21 }; 22 23 class D : public B, public C 24 { 25 public: 26 protected: 27 private: 28 }; 29 30 int main() 31 { 32 std::cout << sizeof(A) << std::endl; // 4 虚函数表指针4字节 33 std::cout << sizeof(B) << std::endl; // 8 4字节指针+4字节虚函数表指针 34 std::cout << sizeof(C) << std::endl; // 8 4字节指针+4字节虚函数表指针 35 std::cout << sizeof(D) << std::endl; // 12 B类部分和C类部分分别有一个4字节指针,再加上4字节虚函数表指针,共8字节 36 37 return 0; 38 }
浙公网安备 33010602011771号