| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 744 人关注过本帖
标题:还是继承与派生。。。
取消只看楼主 加入收藏
sunflower44
Rank: 1
等 级:新手上路
帖 子:23
专家分:1
注 册:2011-8-15
结帖率:80%
收藏
已结贴  问题点数:18 回复次数:3 
还是继承与派生。。。
先上代码~~~

 #include<iostream.h>
        class A{
        private:
          int a;
        public:
          A(){ a=0;cout<<"A′s defanlt constructor called.\n"; }
          A(int i){ a=i;cout<<"A′s constructor called.\n"; }
          void print(){ cout<<a<<","; }
          ~A(){ cout<<"A′s destructor called.\n"; }
          int Geta(){ return a; }
        };
        class B: public A{
        public:
          B(){ b=0;cout<<"B′s defanlt constructor called.\n"; }
          B(int i,int j,int k):A(i),aa(j){ b=k;  cout<<"B′s constructor called.\n"; }
          void print();
          ~B(){ cout<<"B′s destructor called.\n"; }
        private:
          int b;
          A aa;                //子对象,或称为成员对象
        };
       void B::print(){
          A::print();
          cout<<b<<","<<aa.Geta()<<endl;
        }
        void main(){
          B bb[2]={B(1,2,5),B(3,4,7)};
          for(int i=0;i<2;i++) bb[i].print();
        }


运行结果:
A's constructor called.
A's constructor called.
B's constructor called.
A's constructor called.
A's constructor called.
B's constructor called.
1,5,2
3,7,4
B's destructor called.
A's destructor called.
A's destructor called.
B's destructor called.
A's destructor called.
A's destructor called.


我想问下,为什么在子对象调用构造函数的时候,调用的是
 A(int i){ a=i;cout<<"A′s constructor called.\n"; }
而不是
 A(){ a=0;cout<<"A′s defanlt constructor called.\n"; }
子对象aa不是不带参数吗?
后面析构函数调用同问。。。。不懂啊,到底什么时候调用缺省构造函数和缺省析构函数?
搜索更多相关主题的帖子: private include public return called private include public return called 
2011-08-22 00:13
sunflower44
Rank: 1
等 级:新手上路
帖 子:23
专家分:1
注 册:2011-8-15
收藏
得分:0 
回复 5楼 jcw08120110
试代码没什么啊,可是我不知道为什么会出现那样的结果。。。
其实我想问的就是,调用含参的构造或析构函数还是调用默认的构造或析构函数,到底看哪里啊?判断子对象是否含参数,到底看哪里的代码啊?
2011-08-22 21:17
sunflower44
Rank: 1
等 级:新手上路
帖 子:23
专家分:1
注 册:2011-8-15
收藏
得分:0 
回复 2楼 rjsp
你的意思是说,判断子对象带不带参数,要看
B(int i,int j,int k):A(i),aa(j){ b=k;  cout<<"B′s constructor called.\n"; }
这一行代码?
也就是要看派生类构造函数初始化表中的子对象有没有参数?
2011-08-22 21:20
sunflower44
Rank: 1
等 级:新手上路
帖 子:23
专家分:1
注 册:2011-8-15
收藏
得分:0 
回复 8楼 specilize
不是。。。没那么复杂。我就是看着
A aa;                //子对象,或称为成员对象
这行代码对aa没有初始化值,所以要调用那个没有参数的构造函数。。。
如果写的是
A aa(1);                //子对象,或称为成员对象
我就用那个有参数的了。
因为我不知道从什么代码判断有参还是无参
2011-08-22 22:29
快速回复:还是继承与派生。。。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024210 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved