#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修饰的常量,需要在构造函数中用初始化列表对其初始化,不能在构造函数体内初始化。