这个程序是书上例题,主要是辅助理解组合类
#include <iostream>
#include <cmath>
using namespace std;
class Point //定义Point类
{
public:
Point(int xx= 0, int yy = 0)
{
x = xx;
y = yy;
}
Point(Point &p);
int getx()
{
return x;
}
int gety()
{
return y;
}
private:
int x,y;
};
Point::Point(Point &p)//复制构造函数实现
{
x = p.x;
y = p.y;
cout<<"calling the copy constructor of point"<<endl;
}
//类的组合
class Line//line类的定义
{
public://外部接口
Line(Point xp1,Point xp2);
Line(Line &l);
double getLen()
{
return len;
}
private://私有数据成员
Point p1,p2;//Point类的对象p1,p2
double len;
};
//组合类的构造函数
Line::Line(Point xp1,Point xp2):p1(xp1),p2(xp2)
{
cout<<"calling constructor of line"<<endl;
double x = static_cast<double>(p1.getx() - p2.getx());
double y = static_cast<double>(p1.gety() - p2.gety());
len = sqrt(x*x + y*y);
}
//组合类的复制构造函数
Line::Line(Line &l):p1(l.p1),p2(l.p2)
{
cout<<"calling the copy constructor of line"<<endl;
len = l.len;
}
int main()
{
Point myp1(1,1),myp2(4,5);//建立Point类的对象
Line line(myp1,myp2);//建立Line类的对象
Line line2(line);//利用复制构造函数建立一个新对象
cout<<"The length of the line is:";
cout<<line.getLen()<<endl;
cout<<"The length of the line2 is:";
cout<<line.getLen()<<endl;
return 0;
return 0;
}