学习子类的构造和析构顺序

1 构造函数不能是虚函数

2 当析构函数不是虚函数时:父指针子对象时:构造是父—>子,析构是父;

3 当析构函数不是虚函数时:子指针子对象时:构造是父—>子,析构是子—>父;

4 当析构函数是虚函数时:父指针子对象时:构造是父—>子,析构是子—>父;

5 构造和析构函数中的虚函数都不能触发多态行为。

代码:

 1 #include <stdlib.h>
 2 
 3 /**
 4 * @author:zanzan101
 5 */
 6 class A
 7 {
 8 public:
 9     A(){
10         printf("Ac\n");
11         todo();
12     }
13     virtual ~A(){
14         printf("Ad\n");
15         todo();
16     }
17     virtual void todo()
18     {
19         printf("A: todo\n");
20     }
21 };
22 class B: public A
23 {
24 public:
25     B(){
26         printf("Bc\n");
27         todo();
28     }
29     virtual ~B(){
30         printf("Bd\n");
31         todo();
32     }
33     void todo()
34     {
35         printf("B: todo\n");
36     }
37 };
38 
39 int main()
40 {
41     printf(">> 父指针子对象\n");
42     A* p = new B();
43 
44     printf("----------\n");
45     p->todo();
46     printf("----------\n");
47     delete p;
48 
49 
50     printf(">> 子指针子对象\n");
51     B* q = new B();
52     printf("----------\n");
53     q->todo();
54     printf("----------\n");
55     delete q;
56 
57 
58     system("pause");
59 
60     return 0;
61 }

输出:

>> 父指针子对象
Ac
A: todo
Bc
B: todo
----------
B: todo
----------
Bd
B: todo
Ad
A: todo
>> 子指针子对象
Ac
A: todo
Bc
B: todo
----------
B: todo
----------
Bd
B: todo
Ad
A: todo
请按任意键继续. . .

 

posted @ 2013-10-17 09:28  铁甲小宝  阅读(501)  评论(0编辑  收藏  举报