因为引用类型的成员变量定义时需要赋值,不然其所在的类初始化时有编译错误,所以一直以为不能使用引用类型的变量作为成员变量。但在探讨C++的前置声明知识时,发现是可以定义引用类型的成员变量的。

    如下讲解一下如何使用引用类型的成员变量。

//AAA.h
#pragma once

class BBB;

class AAA
{
public:
    AAA(BBB &x);
    ~AAA();
    
private:
    BBB &b;
};

#include "AAA.h"
AAA::AAA(BBB &x) : b(x)
{
}

AAA::~AAA(void)
{
}




//BBB.h
#pragma once

class AAA;

class BBB
{
public:
    BBB(void);
    ~BBB(void);
    void NewAAA();

private:
    AAA *a;
};


//BBB.cpp
#include "BBB.h"
#include "AAA.h"

BBB::BBB()
{
    NewAAA();
}

BBB::~BBB(void)
{
}

void BBB::NewAAA()
{
 BBB b;
 a = new AAA( b );
}


//main.cpp
#include <iostream>

int main()
{
    return 0;
}

    如上程序所示,在AAA的头文件中定义了引用类型的成员变量,在AAA的构造函数初始化列表中对其进行了初始化,达到了“使用引用类型的成员变量”的目的。

    注意,引用类型的成员变量的初始化必须在构造函数的初始化列表中进行初始化。