注册 登录
编程论坛 C++教室

一个类怎么持有其他类的引用?

dousao 发布于 2010-11-29 15:11, 942 次点击
比如 A类中 想持有B类的引用 达到在A中操作B中变量的目的
A中申明 变量 B m_b;
A中申明 构造函数 A(B& b){m_b = b;}

编译不通过
7 回复
#2
zfan852010-11-29 15:28
你定义了 class B的= 了么?
#3
玩出来的代码2010-11-29 15:52
在A中 B &m_b;
A(B& b):m_b(b){}
#4
s5451678662010-11-29 16:26
3楼正解 你要用的是B的引用,你在A中定义的知识一个B的变量,不是引用类型的
#5
laoyang1032010-11-29 16:38
你要知道构造函数调用的顺序:
1.如果这个类是个派生类,先调用基类的构造函数(你的显然不是)
2.如果你这类中有内嵌子对象,比如说像这样:
class A
{
 public:
       A();
      ~A();
private:
        B b;//假如说B也是一个类
     int  a;
};
那么你应该先调用B类的构造函数,则A的构造函数应该实现如下:
A::A(int b1,int b2):b(b1,b2)//假如B类构造函数有两个参数
3.最后调用本类自己的构造函数
#6
ml2325282010-12-02 22:36
class A
{
public:
       A(B& b):m_b(b){};
      ~A();
private:
        B &m_b;//假如说B也是一个类
};
#7
pangding2010-12-02 23:28
想定义引用类型的话,就是 3楼 说的那样。6楼 和 3楼 是一个意思。
#8
lintaoyn2010-12-03 07:41
楼主可查阅初始化列表相关内容。
A(B& b){m_b = b;}//这是无初始化,相当于,B& m_b;m_b = b;
A(B& b):m_b(b){ }//这是给m_b进行初始化。相当于,B& m_b = b;
1。除了静态数据成员,其它的数据成员都是先在初始化列表里完成初始化,然后再进入函数体当中。没有在初始化列表里出现的,就调用其默认构造函数。(编译器可能会有优化行为。)
2。没有空引用,引用必须初始化。

1