#include <iostream>
class A
{
public:
A(int i = 3):m_i(i){}
void print(){
std::cout << "m_i= " << m_i << std::endl;
}
void add(){
m_i++;
}
int get_m_i()
{
return m_i;
}
private:
int m_i;
};
class B{
public:
//B(){} //如果有引用对象成员,则不可以有显示的默认构造函数,即必须对
B(A& a):m_a(a){}
void display(){
m_a.print();
}
void Addb(){
m_a.add();
}
private:
A& m_a;
};
int main(void)
{
A a(5);
a.add();
B b(a);
b.Addb();
b.display();
a.print();
int c;
std::cin >> c;
return 0;
}
其中,要注意的地方就是引用类型的成员变量的初始化问题,它不能直接在构造函数里初始化,必须用到初始化列表,且形参也必须是引用类型。凡是有引用类型的成员变量的类,不能有缺省构造函数。原因是引用类型的成员变量必须在类构造时进行初始化。如果两个类要对第三个类的数据进行共享处理,可以考虑把第三个类作为这两个类的引用类型的成员变量。