分享

关于类的组合实例

 融水公子 2018-08-08
看源代码:
#include<iostream>
#include<cmath>
using namespace std;
class Point{
    private:
    int x,y;
    public:
    Point(int x,int y);//默认形参值构造函数 值传递
    Point(Point& p);//拷贝构造函数  值传递
    int Getx();//输出x
    int Gety();//输出y
    void Draw();//画点
};
Point::Point(int x=0,int y=0){
    this->x=x;
    this->y=y;
    cout<<"Point默认形参值构造函数被调用!"<<endl;
}
Point::Point(Point& p):x(p.x),y(p.y){//不能写成     :x=p.x,y=p.y
    cout<<"Point拷贝构造函数被调用!"<<endl;
}
int Point :: Getx(){
    return x;
}
int Point::Gety(){
    return y;
}

class Line{
    private:
    Point p1,p2;
    double len;
    public:
    Line();//无参构造函数  传递点
    Line(Point a,Point b);//内嵌子对象构造函数
    Line(Line& p);//拷贝构造函数 传递点
    void Getline();
};

Line::Line(){
    len=0;
}

Line::Line(Point a,Point b):p1(a),p2(b){//必须放在初始化列表 完成内嵌子对象的构造
    cout<<"line 内嵌子对象 构造函数被调用"<<endl;
    double x=double(a.Getx()-b.Getx());
    double y=double(a.Gety()-b.Gety());
    len=sqrt(x*x+y*y);
}
Line::Line(Line& p):p1(p.p1),p2(p.p2){//拷贝构造函数
    len=p.len;
    cout<<"Line 拷贝构造函数被调用!"<<endl;
}

int main(){
    Point myp1(1,2),myp2(2,4);
    Line myline(myp1,myp2);
    Line myline2(myline);
    cout<<"len:"<<myline2.Getline()<<endl;
}
运行的结果:
Point默认形参值构造函数被调用!
Point默认形参值构造函数被调用!
Point拷贝构造函数被调用!
Point拷贝构造函数被调用!
Point拷贝构造函数被调用!
Point拷贝构造函数被调用!
line 内嵌子对象 构造函数被调用
Point拷贝构造函数被调用!
Point拷贝构造函数被调用!
Line 拷贝构造函数被调用!
len:2.23607

分享知识,分享快乐!希望中国站在编程之巅!

               ----

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多