首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

组合类的构造函数是如何起作用的

2012-02-22 
组合类的构造函数是怎么起作用的?现在要建立一个line类,数据成员包含两个point类的对象p1,p2和double型数

组合类的构造函数是怎么起作用的?
现在要建立一个   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   ;
}




[解决办法]
line::line (point xp1,xp2):
汗,你怎么看书的
line::line (point xp1,point xp2):
[解决办法]
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);//计算长度

}

是不是能看懂了? 其实就是这样子
[解决办法]
怎么调用?就是line的构造函数中将两个p1,p2 new出来,new里面会调pointer的构造,就这样啊。
[解决办法]
楼主我对你的那一段有问题的地方修改一下,再解释如下

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就都有定义了.

热点排行