在B类中有成员变量为A类的对象,B类拷贝构造函数的写法

#include <iostream>
#include <string.h>

using namespace std;

class A
{
private:
    int m_a;
    int m_b;
    int m_c;
public:
    A(int a, int b, int c)                 //构造函数
    {
        m_a = a;
        m_b = b;
        m_c = c;
        cout << "A construct! " << endl;
    }
    A(const A &obj)                       //拷贝构造函数
    {
        cout << "A cpy construct" << endl;
    }
    ~A()                        //析构函数
    {
        cout << "A destroy! " << endl;
    }
    void print ()
    {
        cout <<"m_a, m_b, m_c" << m_a << m_b << m_c << endl;
    } 
};

class B
{
private:
    A a1;                 //成员变量为A类对象
    A a2;
    const int data;
public:
    B():a1(1,2,3),a2(4,5,6),data(100)            //构造函数使用初始化列表
    {
        cout << "B construct" << endl;
        cout << data << endl;
    }
    B(const B &obj):a1(obj.a1),a2(obj.a2),data(obj.data)    //拷贝构造函数初始化列表使用A类的拷贝构造函数,也可将obj.a1换成
    {                                                                                      //具体A类参数,如 a1(1,2,3),此时调用A类的构造函数初始化
        cout << "B cpy construct " << endl;
    }
    ~B()                       //析构函数
    {
        cout << "B destroy!" << endl;
    }
    void print()
    {
        a1.print();
        a2.print();
        cout << " data  "  << endl;
    }
};

    
int main()
{
    B a;
    a.print();
    B b(a);
    b.print();
   
    return 0;
}

注意事项:若类中有成员变量为另一类的对象,或成员变量为const修饰的常量,需要在构造函数中用初始化列表对其初始化,不能在构造函数体内初始化。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值