| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 596 人关注过本帖
标题:请教一个(无参)重载构造函数的问题
只看楼主 加入收藏
Iamagays
Rank: 1
等 级:新手上路
帖 子:60
专家分:0
注 册:2007-6-21
收藏
 问题点数:0 回复次数:2 
请教一个(无参)重载构造函数的问题

# 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编辑过]

搜索更多相关主题的帖子: 函数 构造 重载 
2007-07-09 09:59
Arcticanimal
Rank: 3Rank: 3
等 级:论坛游民
威 望:7
帖 子:341
专家分:20
注 册:2007-3-17
收藏
得分:0 

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

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


try new catch
2007-07-09 11:07
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 
在类中,成员的初始化工作都是由构造函数完成的。
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");
}
两个位置定义分别运行下。


Fight  to win  or  die...
2007-07-09 13:09
快速回复:请教一个(无参)重载构造函数的问题
数据加载中...
 
   



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

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