• 组合类、派生类 拷贝构造函数


    在派生类中如何写拷贝构造函数

    一种形式:派生类拷贝构造函数名(对象p的引用):基类构造函数名(参数列表)

    如:student::student(student&p):stud(p.num,p.name,p.sex)
    //注意,参数形式,是对象的引用,我们知道引用是C++特有的,这又是一个引用的用法 呵呵

    一种形式:派生类拷贝构造函数名(对象p的引用):基类拷贝构造函数名(p)

    如:student::student(student &p):stud( p)

    注意:在调用基类的构造函数时或拷贝构造函数时,参数一定要干净,啥都不带,就是个参数名,如是数组就写数组名,如是对象,就写对象名!

    组合类构造函数一般形式

    #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),Y(p.Y){cout<<”Point拷贝构造函数被调用”<<endl;}
    //拷贝构造函数或者可以使用下面的表示方法

    //类的组合
     class Line
     {
       public:
        Line(Pointxp1,Point xp2);
        Line(Line&);
        doubleGetLen(){return len;}
       private:
        Pointp1,p2;
        doublelen;
     };

     //组合类的构造函数

     Line::Line(Point xp1,Pointxp2):p1(xp1),p2(xp2)  //构造函数
     {
     
     cout<<”Line构造函数被调用”<<endl;
     double x=double(p1.GetX()-p2.GetX());
     double y=double(p1.GetY()-p2.GetY());
    len=sqrt(x*x+y*y);
     }
     //组合类的拷贝构造函数
     
     Line::Line(Line&L):p1(L.p1),p2(L.p2)//拷贝构造函数
     {
     cout<<”Line拷贝构造函数被调用”<<endl;
     len=L.len;
     }
     //主函数
     int main()
     {
     Point myp1(1,1),myp2(4,5);
     Line line(myp1,myp2);
     Line line2(line);
     cout<<”The lengthof the line is:”;
     cout<<line.GetLen()<<endl;
     cout<<”The lengthof the line2 is:”;
     cout<<line2.GetLen()<<endl;
     }

    //注意常数据成员只能通过初始化列表来获得初值,如

    #include <iostream>
    using namespace std;
    class A
    {
    public:
        A(inti);
     void print();
        const int&r;
    private:
        const inta;
        static constint b;//静态常数据成员
    };
    const int A::b=10;//静态常数据成员在类外说明和初始化
    A::A(int i):a(i),r(a)  //常数据成员只能通过初始化列表来获得初始值
       {
       }
    void A::print()
    {
    cout<<a<<”:”<<b<<”:”<<r<<endl;
    }
    int main()
    {
    A a1(100),a2(0);
    a1.print();
    a2.print();
    }
  • 相关阅读:
    代码整洁之道
    PHP并发IO编程之路
    U盘启动盘的制作--用U盘硬装Windows系统、或是重装Windows系统
    Navicat for MySQL11--使用经验
    Eclipse字体颜色的设置方法
    5.5树和森林
    5.2二叉树
    3.3队列
    3.1栈
    2.3线性表的链式存储结构
  • 原文地址:https://www.cnblogs.com/luscinia/p/4177905.html
Copyright © 2020-2023  润新知