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

请教一个(无参)重载构造函数的问题

Iamagays 发布于 2007-07-09 09:59, 601 次点击

# include<iostream.h>
class TPoint
{
int x,y;
public:
TPoint() {}
TPoint(int x1,int y1)
{
x=x1;y=y1;
}
void setvalue(int x1,int y1)
{
x=x1;y=y1;
}
void dispoint()
{
cout<<"("<<x<<","<<y<<")"<<endl;
}
};
void main()
{
TPoint a(12,16),b;
cout<<"First Point=>";
a.dispoint();
b.setvalue(5,18);
cout<<"Second Ponit=>";
b.dispoint();
}

上面程序中TPoint类有两个构造函数,一个没有参数,定义的b对象应该自动调用第一个构造函数,但是第一个构造函数是空函数,b对象之所以能被初始化,我理解是因为b.setvalue成员函数的作用, 而教材上说是b调用了无参构造函数使b被初始化,所以有点糊涂了.

小弟新学C++,希望个路神仙帮帮忙,给我解释一下...

谢~~

[此贴子已经被作者于2007-7-9 10:03:04编辑过]

2 回复
#2
Arcticanimal2007-07-09 11:07

系统会有额外的工作,这部分工作对我们来说是不可见的,也即是并不是所有构造对象的工作都是由构造函数里面的代码完成的

[此贴子已经被作者于2007-7-9 21:18:03编辑过]

#3
aipb20072007-07-09 13:09
在类中,成员的初始化工作都是由构造函数完成的。
TPoint(int x1,int y1)
{
x=x1;y=y1;
}
函数体类的=并非初始化,而是赋值,这是有区别的。
编译器会为你初始化,按照,类类型采用默认构造函数,内置类型在全局0初始化,局部不初始化的原则。
如果你想打破这个规则,那就用初始化列表。这才是初始化(也是在定义)。
TPoint(int x1,int y1) :x(x1),y(y1)
{
}
所以,你代码中那个空构造函数,是否初始化了要看你定义对象的位置。
下面这段代码帮你理解:
struct C{
int x,y;
C(){};
};

//C c;
int main(){
//C c;
cout << c.x << endl << c.y << endl;
system("pause");
}
两个位置定义分别运行下。

1