构造函数和复制构造函数

//便于理解构造函数和复制构造函数
#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