//线段类---两个点类的组合/*点类*/#include<iostream>#include<cmath>usingnamespace std;classPoint{public:Point(int xx=0,yy=0){
x=xx;
y=yy;}//构造函数Point(Point &p);//复制构造函数intgetX(){return x};//返回私有成员变量intgetY(){return y};private:int x,y;}Point::Point(Point &p){
x=p.x;
y=p.y;
cout<<"Calling the copy constructor of Point"<<endl;}//复制构造函数的实现/*线段类*/classLine{public:Line(Point xp1,Point xp2);//构造函数Line(Line &l);//复制构造函数doublegetLen(){return len};private:
Point p1,p2;//Point类对象成语double len;}/*组合类的构造函数*//*线段类的参数是两个点类的对象p1,p2,其中用点类对象xp1初始化p1,用点类对象xp2初始化p2
又用点类对象p1,p2作为实参传给形参xp1,xp2
(这四个初始化实际上调用了复制构造函数)
p1,p2的作用主要用来获取私有变量(.get())
因为Line类不能调用Point类的的x,y,所以需要有个p1,p2来调用*/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_caset<double>(p1.getY()-p2.getY());
len=sqrt(x*x+y*y);}/*这里两个初始化也调用了复制构造*//*由于Line本类对象l可以调用点类,所以可以直接用l.p1*/Line::Line(Line &l):p1(l.p1),p2(l.p2){
cout<<"Calling the copy constructor of Line"<<endl;
len=l.len;}intmain(){
Point myp1(1,1),myp2(4,5);//建立p1,p2
Line line(myp1,myp2);//建立line
Line line2(line);//利用复制构造函数建立line2
cout<<"The length of the line is:";
cout<<line.getLine()<<endl;
cout<<"The length of the line2 is:";
cout<<line2.getLine()<<endl;return0;}