注册 登录
编程论坛 C++教室

构造函数的难点问题,求指教

上善若飞 发布于 2010-12-03 16:00, 496 次点击
这段代码的运行结果是这样的:
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;
6 回复
#2
lintaoyn2010-12-03 16:03
程序代码:
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的构造函数。
#3
上善若飞2010-12-03 16:18
回复 2楼 lintaoyn
谢谢了啊
#4
andyandy2010-12-03 16:23
好帖!
好答!
请教问题1:
运行结果的前三行为什么是
demo 默认构造函数 0
demo 默认构造函数 0
rec 默认构造函数 1000
而不是
rec 默认构造函数 1000
demo 默认构造函数 0
demo 默认构造函数 0
先谢过!
#5
lintaoyn2010-12-03 16:27
构造函数的顺序是这样的
1.构造基类(如果有的话)
2.构造本身的数据成员(如果有的话)
3.最后才是构造自己。
#6
andyandy2010-12-03 16:33
首先表示感谢!
那么问题2:
析构时为什么没有输出x的值?LZ笔误?
#7
lintaoyn2010-12-03 16:36
请自己用编译器编译运行下
1