C++多继承
1.多重继承下的虚函数
(1)
1 #include "stdafx.h" 2 #include "Base.h" 3 4 class base1 5 { 6 public: 7 virtual void prinf() 8 { 9 printf("this is base1 print\n"); 10 } 11 virtual ~base1() 12 { 13 printf("this is ~base1() \n"); 14 } 15 }; 16 class base2 17 { 18 public: 19 virtual void prinf() 20 { 21 printf("this is base2 print\n"); 22 } 23 virtual ~base2() 24 { 25 printf("this is ~base2() \n"); 26 } 27 }; 28 class D1:public base1 29 { 30 public: 31 virtual void prinf() 32 { 33 printf("this is D1 print\n"); 34 } 35 virtual ~D1() 36 { 37 printf("this is ~D1() \n"); 38 } 39 }; 40 class D2:public base2 41 { 42 public: 43 virtual void prinf() 44 { 45 printf("this is D2 print\n"); 46 } 47 virtual ~D2() 48 { 49 printf("this is ~D2() \n"); 50 } 51 }; 52 class M1:public D1,public D2 53 { 54 public: 55 virtual void prinf() 56 { 57 printf("this is M1 print\n"); 58 } 59 virtual ~M1() 60 { 61 printf("this is ~M1() \n"); 62 } 63 }; 64 int main(int argc, char *argv[]) 65 { 66 // 67 base1 *pb1 = new M1; 68 base2 *pb2 = new M1; 69 D1 *pD1 = new M1; 70 D2 *pD2 = new M1; 71 pb1 ->prinf(); 72 pb2 ->prinf(); 73 pD1 ->prinf(); 74 pD2 ->prinf(); 75 return 0; 76 }
结果为:
this is M1 print this is M1 print this is M1 print this is M1 print Press any key to continue
可以看出,虚拟函数的dynamic性质。
(2)delete关系
在上术代码的第74与76中间加入delete pb1;
结果如下:
this is M1 print this is M1 print this is M1 print this is M1 print this is ~M1() this is ~D2() this is ~base2() this is ~D1() this is ~base1() Press any key to continue
2 虚继承

浙公网安备 33010602011771号