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 "); 11 todo(); 12 } 13 virtual ~A(){ 14 printf("Ad "); 15 todo(); 16 } 17 virtual void todo() 18 { 19 printf("A: todo "); 20 } 21 }; 22 class B: public A 23 { 24 public: 25 B(){ 26 printf("Bc "); 27 todo(); 28 } 29 virtual ~B(){ 30 printf("Bd "); 31 todo(); 32 } 33 void todo() 34 { 35 printf("B: todo "); 36 } 37 }; 38 39 int main() 40 { 41 printf(">> 父指针子对象 "); 42 A* p = new B(); 43 44 printf("---------- "); 45 p->todo(); 46 printf("---------- "); 47 delete p; 48 49 50 printf(">> 子指针子对象 "); 51 B* q = new B(); 52 printf("---------- "); 53 q->todo(); 54 printf("---------- "); 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 请按任意键继续. . .