首页
社区
课程
招聘
[旧帖] [分享]c++组合类构造函数、拷贝构造函数 实例分析 0.00雪花
发表于: 2015-11-11 15:06 1410

[旧帖] [分享]c++组合类构造函数、拷贝构造函数 实例分析 0.00雪花

2015-11-11 15:06
1410
#include <iostream>
#include <cmath>
using namespace std;
class 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+1;        //运算后对拷贝对象赋值
        Y=p.Y+2;  //注意运算结果对应的初始值
        cout<<"Point拷贝构造函数被调用 ";
        cout<<X<<" "<<Y<<"\n";
}

class Line
{
        public:
                Line(Point xp1,Point xp2);
                Line(Line &);
                double GetLen(){
                        return len;
                }
        private:
                Point p1,p2;
                double len;
};

Line::Line(Point xp1,Point xp2):p1(xp1),p2(xp2)                //xp1,xp2形实结合时 ,以xp1 xp2初始化p1 p2 时 4次调用Point拷贝构造函数
                                                        //形实结合时从右到左,初始化时按出现顺序
                                                        //同类间册初始化即是拷贝过程,
                                                        //形实结合 从固定地址 拷贝到临时地址
//组合类构造函数 结构:类名::类名(参数列表):内嵌对象(参数列表)
{
        cout<<"Line构造函数被调用"<<endl;
        double x = double(p1.GetX()-p2.GetY());
        double y = double(p1.GetY()-p2.GetY());
        len = sqrt(x*x + y*y);
}

Line::Line(Line &L):p1(L.p2),p2(L.p1)        //L是对象名 以L中的p1,初始化拷贝目标的p2 同类间的初始化即是拷贝过程
{
        cout<<"Line拷贝构造函数被调用"<<endl;
        len = L.len;
}

int main()
{
        Point myp1(1,1),myp2(4,5);        //只调用Point构造函数
        Line line(myp1,myp2);        //将调用4次Point拷贝构造函数,将调用Line构造函数
        //myp1 myp2对应 Line::Line(Point xp1,Point xp2):p1(xp1),p2(xp2)        中xp1 xp2
        Line line2(line);        //将调用2次Point拷贝构造函数,将调用Line拷贝构造函数
/*        cout<<"The length of the line is:";
        cout<<line.GetLen()<<endl;
        cout<<"The length of the line2 is:";
        cout<<line2.GetLen()<<endl;
*/
}

[培训]科锐逆向工程师培训第53期2025年7月8日开班!

收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回