Chinaunix首页 | 论坛 | 博客
  • 博客访问: 466965
  • 博文数量: 93
  • 博客积分: 5006
  • 博客等级: 上校
  • 技术积分: 1002
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-30 13:58
文章分类

全部博文(93)

文章存档

2012年(2)

2011年(68)

2010年(23)

分类: C/C++

2011-04-13 21:59:49

  1 #include                                                                                  
  2
  3 using namespace std;
  4
  5 class A
  6 {
  7     public:
  8         A()
  9         {
 10             cout << "A::A()"<< endl;
 11         }
 12
 13 };
 14
 15 class B:public A
 16 {
 17     public:
 18         B():j(0)
 19     {
 20         cout<<"B::B()"< 21     }
 22     private:
 23         int j;
 24 };
 25
 26 class c1
 27 {
 28     public:
 29         c1(int i):a(i)
 30     {
 31         cout <<"c1::c1()"< 32     }
 33     private:
 34         int a;
 35 };
 36
 37 class c2
 38 {
 39     public:
 40         c2(double val):d(val)
 41     {
 42         cout <<"c2::c2()"< 43     }
 44     private:
 45         double d;
 46 };
 47
 48 class c3
 49 {
 50     public:
 51         c3(int v = 0):j(v)
 52     {
 53         cout << "c3:c3()"< 54     }
 55     private:
  56         int j;
 57 };
 58
 59 class D:public B
 60 {
 61     public:
 62         D(double v2,int v1):cc2(v2),cc1(v1)
 63     {
 64         cout<<"D::D()";
 65     }
 66     private:
 67      c1 cc1;
 68      c2 cc2;
 69      c3 cc3;
 70 };
 71
 72 int main(void)
 73 {
 74     D d(1.0,3);
 75     return 0;
 76 }


执行结果:
A::A()
B::B()
c1::c1()
c2::c2()
c3:c3()
D::D()
我想这个程序  你应该觉得稀松平常

以此来说明一下递归的规律:

(1) 递归从父类对象开始,D的构造函数首先通过“初始化”操作构造其直接父类B 的构造函数
(2)构造类A的对象后,B的 初始化 操作执行初始化类表的j(0)对j进行初始化。
(3)构造类B的对象后,类D 的  初始化  操作接着初始化其成员变量对象,这里是cc1,cc2,cc3.
 (4) 随着cc1,cc2,cc3这三个成员变量构造完毕,类D的构造函数的  初始化 操作部分结束,程序开始进入其构造函数的第二部分。
(5) 在c++中,创建销毁对象是影响性能的一个非常突出的操作。
(6)  您看到,如果在实现构造函数时,没有注意到执行构造函数体前的初始化操作已经将所有父类对象和成员变量对象构造完毕。                                                                             

阅读(1250) | 评论(2) | 转发(0) |
给主人留下些什么吧!~~

随1意2o2011-04-14 23:11:25

caojiangfeng: .....
你要 好好看  慢慢看  好好 的  慢慢的  淡淡的

caojiangfeng2011-04-14 13:02:09