标题:构造函数的难点问题,求指教
只看楼主
上善若飞
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2010-11-24
结帖率:100%
 问题点数:0 回复次数:6 
构造函数的难点问题,求指教
这段代码的运行结果是这样的:
demo 默认构造函数 0
demo 默认构造函数 0
rec 默认构造函数 1000
析构函数
析构函数
析构函数

我疑惑的是为什么当我申明rec的对象时会调用 demo的默认构造函数,而且还是两次,请高人点拨,不胜感激!
#include <iostream>
using namespace std;
class demo
{
public:
demo(){ x=0; cout<<"demo默认构造函数..."<<"\t"<<x<<endl;}
demo(int i){x=i;cout<<"带一个参数的默认构造函数"<<"\t"<<x<<endl;}
~demo(){cout<<"析构函数..."<<"\t"<<x<<endl;}
int get(){return x;}
void set(int i){x=i;}
private:
int x;
};
class rec
{
public:
rec(){x=1000;cout<<"rec默认构造函数..."<<"\t"<<x<<endl;}
rec(int i,int j,int k):x(i),width(j),length(k)
{
        cout<<"rec带三个参数的构造函数..."<<" "<<"面积为:"<<width.get()*length.get()<<endl;
}
~rec(){cout<<"析构函数..."<<"\t"<<x<<endl;}
private:
int x;
demo width;
demo length;
};
void main()
{
rec a;
搜索更多相关主题的帖子: 难点 函数 构造 指教 
2010-12-03 16:00
lintaoyn
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:605
专家分:2489
注 册:2009-4-8
得分:0 
程序代码:
class rec
{
public:
rec(){x=1000;cout<<"rec默认构造函数..."<<"\t"<<x<<endl;}
rec(int i,int j,int k):x(i),width(j),length(k)
{
        cout<<"rec带三个参数的构造函数..."<<" "<<"面积为:"<<width.get()*length.get()<<endl;
}
~rec(){cout<<"析构函数..."<<"\t"<<x<<endl;}
private:
int x;
demo width;
demo length;
};
rec有两个数据成员width和length它们是demo类型的对象,所以会调用demo的构造函数。

迭代的是人,递归的是神。
2010-12-03 16:03
上善若飞
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2010-11-24
得分:0 
回复 2楼 lintaoyn
谢谢了啊
2010-12-03 16:18
andyandy
Rank: 2
等 级:论坛游民
威 望:1
帖 子:108
专家分:94
注 册:2009-4-28
得分:0 
好帖!
好答!
请教问题1:
运行结果的前三行为什么是
demo 默认构造函数 0
demo 默认构造函数 0
rec 默认构造函数 1000
而不是
rec 默认构造函数 1000
demo 默认构造函数 0
demo 默认构造函数 0
先谢过!
2010-12-03 16:23
lintaoyn
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:605
专家分:2489
注 册:2009-4-8
得分:0 
构造函数的顺序是这样的
1.构造基类(如果有的话)
2.构造本身的数据成员(如果有的话)
3.最后才是构造自己。

迭代的是人,递归的是神。
2010-12-03 16:27
andyandy
Rank: 2
等 级:论坛游民
威 望:1
帖 子:108
专家分:94
注 册:2009-4-28
得分:0 
首先表示感谢!
那么问题2:
析构时为什么没有输出x的值?LZ笔误?
2010-12-03 16:33
lintaoyn
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:605
专家分:2489
注 册:2009-4-8
得分:0 
请自己用编译器编译运行下

迭代的是人,递归的是神。
2010-12-03 16:36



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-327787-1-1.html




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

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