//便于理解构造函数和复制构造函数
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
class Point
{
public:
Point(int x,int y):x(x),y(y){cout<<"** gouzao"<<endl;}
Point(Point &p);
void show();
int getx();
int gety(){return y;}
private:
int x,y;
};
inline int Point::getx(){return x;}
Point::Point(Point &p)
{
cout<<"** fuzhi gouzao "<<endl;
cout<<p.getx()<<"::::"<<p.gety()<<endl;
x=p.x+1,y=p.y+1;
}
inline void Point::show()
{
printf("%d : %d\n",x,y);
}
class Line
{
public:
Line(Point &p3,Point p4):p1(p3),p2(p4)//值得注意 调用三次Point类的复制构造函数
{
cout<<p1.getx()<<"_"<<p1.gety()<<"_"<<p2.getx()<<"_"<<p2.gety()<<endl;
len=double(p1.getx()+p1.gety()+p2.getx()+p2.gety());
cout<<len<<" @@@@@@@ gouzao"<<endl;
}
Line(Line &li);
void kaka(){p1.show();}
void kbkb(){p2.show();}
void getlen(){printf("%.f !(*@)*^!#(^@!_#*(@\n",len);}
private:
Point p1,p2;
double len;
};
//组合类的构造函数
Line::Line(Line &li):p1(li.p1),p2(li.p2)
{
cout<<" @@@@@@fu zhi gou zao"<<endl;
p1.show(),p2.show();
len=li.len+7;
}
int main()
{
Point myp(2,3),hisp(4,5);
myp.show(),hisp.show();
hisp=myp;
hisp.show();
Line a(myp,hisp);
a.kaka(),a.kbkb(),a.getlen();
Line b(a);
b.kaka(),b.kbkb(),b.getlen();
b=a;
b.kaka(),b.kbkb(),b.getlen();
}
/* 运行结果
** gouzao
** gouzao
2 : 3
4 : 5
2 : 3
** fuzhi gouzao
2::::3
** fuzhi gouzao
2::::3
** fuzhi gouzao
3::::4
3_4_4_5
16 @@@@@@@ gouzao
3 : 4
4 : 5
16 !(*@)*^!#(^@!_#*(@
** fuzhi gouzao
3::::4
** fuzhi gouzao
4::::5
@@@@@@fu zhi gou zao
4 : 5
5 : 6
4 : 5
5 : 6
23 !(*@)*^!#(^@!_#*(@
3 : 4
4 : 5
16 !(*@)*^!#(^@!_#*(@ */
构造函数和复制构造函数
猜你喜欢
转载自blog.csdn.net/qq_42576687/article/details/88957178
今日推荐
周排行