组合类的构造函数是怎么起作用的?

crazy_liu 2007-04-11 04:21:03
现在要建立一个 line 类,数据成员包含两个point类的对象 p1,p2和double型数据表示线段长度
我不明白组合类line的构造函数是怎么调用的?另外整个程序同不过编译



#include<iostream>
#include<cmath>
using namespace std;

//定义点point类
class point
{
public:
point(int xx=0,int yy=0){x=xx;y=yy;} //构造函数
point(point &p); //拷贝构造函数
int getx(){return x;} //获得点的X坐标
int gety(){return y;}
private:
int x,y;
};
point::point(point &p)
{
x=p.x;
y=p.y;
}

//定义组合类line,其数据成员包含2个point对象和一个double类型数据表示线段长度
class line
{
public:
line(point xp1,point xp2); //构造函数
line(line &l1); //拷贝构造函数
double getlen(){return len;} //获得线段的长度
private:
point p1,p2;
double len;
};
//构造函数
line::line (point xp1,xp2):p1(xp1),p2(xp2)//我不明白组合类line的构造函数 是怎么调用的?
{
double a=double(p1.getx()-p2.getx());
double b=double(p1.gety()-p2.gety());
len=sqrt(a*a+b*b);//计算长度

}
//拷贝构造函数
line::line (line &l1):p1(l1.p1),p2(l1.p2)
{
len=l1.len ;
}

//main
main()
{
point myp1(1,5),myp2(2,4);//建立两个对象
line line1(myp1,myp2); //建立组合类的对象
line line2(line1);
cout<<"the length of line1:"<<line1.getlen ;
cout<<"the length of line2:"<<line2.getlen ;
}



...全文
410 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
xlbdan 2007-04-27
  • 打赏
  • 举报
回复
那是私有的
crazy_liu 2007-04-12
  • 打赏
  • 举报
回复

我又有些地方不明白了:

cout<<"the length of line1:"<<line1.getlen ;
cout<<"the length of line2:"<<line2.getlen ;
中,使用line1.getlen 或者line1.getlen ()都不会有错误,可为什么使用line1.len就会有错误呢?len 不是对象line1的数据成员(属性)吗?可为什么就不能这样用啊?
crazy_liu 2007-04-12
  • 打赏
  • 举报
回复
抱歉,使用line1.getlen是错的,能通过编译但结果是错的,一时不小心看错了
应该是:
使用line1.getlen ()不会有错误,可为什么使用line1.len就会有错误呢?len 不是对象line1的数据成员(属性)吗?可为什么就不能这样用啊?
xlbdan 2007-04-11
  • 打赏
  • 举报
回复
楼主我对你的那一段有问题的地方修改一下,再解释如下

line::line (const point &xp1,const point &xp2):p1(xp1),p2(xp2) //改成这样最好
{
double a=double(p1.getx()-p2.getx());
double b=double(p1.gety()-p2.gety());
len=sqrt(a*a+b*b);//计算长度
}

这就是line的构造函数啊,它的参数是两个point类型的对象的引用.
line::line (const point &xp1,const point &xp2):p1(xp1),p2(xp2) 这一句,
后面的p1(xp1),p2(xp2)是成员初始化的作用,
把你的数据成员p1和p2分别调用拷贝构造函数进行了初始化.
相当于
point xp1,xp2;
line p1(xp1);
line p2(xp2);
所以你的成员p1和p2就都有定义了.
thinkinnight 2007-04-11
  • 打赏
  • 举报
回复
怎么调用?就是line的构造函数中将两个p1,p2 new出来,new里面会调pointer的构造,就这样啊。
Benny_ywb 2007-04-11
  • 打赏
  • 举报
回复
。。
freshui 2007-04-11
  • 打赏
  • 举报
回复
line::line (point xp1, point xp2){
p1 = xp1;
p2 = xp2;
double a=double(p1.getx()-p2.getx());
double b=double(p1.gety()-p2.gety());
len=sqrt(a*a+b*b);//计算长度

}

是不是能看懂了? 其实就是这样子
freshui 2007-04-11
  • 打赏
  • 举报
回复
line::line (point xp1, point xp2):p1(xp1),p2(xp2)//我不明白组合类line的构造函数 是怎么调用的?
{
double a=double(p1.getx()-p2.getx());
double b=double(p1.gety()-p2.gety());
len=sqrt(a*a+b*b);//计算长度

}
taodm 2007-04-11
  • 打赏
  • 举报
回复
line::line (point xp1,xp2):
汗,你怎么看书的
line::line (point xp1,point xp2):

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧