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 虚继承

 

posted @ 2013-05-02 16:44  程序world  阅读(96)  评论(0)    收藏  举报