声明对类的引用作为类成员

时间:2015-03-24 07:41:17

标签: c++ class object reference

我想声明对类的引用类似于指向类的指针作为它自己的成员变量。以下是我编写的代码,但我现在陷入困境,如何进一步创建这样一个类的对象,因为即使我编写默认构造函数或构造函数来初始化var,编译器也总是会出错。 / p>

class Test2
{
private:
    Test2& testRef;
    int var;

public:
    Test2( int x, Test2 testObj ) : var( x ), testRef( testObj )
    {

    }
};

我需要做些什么来创建这样的类的对象,或者根本不可能这样做。如果不可能,为什么不编译器只是给出一个错误,说你不能引用自己的类

2 个答案:

答案 0 :(得分:5)

如果您有引用成员,则必须在所有构造函数中初始化它,因为必须初始化引用。甚至是你的默认构造函数。由于您创建的此类的第一个对象将没有其他任何可以引用的对象,因此您必须将其引用给自己。例如:

Test2() :testRef(*this) {}

答案 1 :(得分:0)

您尝试将对象的临时副本传递给引用。 如果你在构造函数中传递引用,那就没问题了:

Test2( int x, Test2& testObj ) : var( x ), testRef( testObj )
{

}

补充问题:你需要你的引用非常量吗? 如果您不修改对象,可能最好使用const引用:

class Test2
{
  private:
    const Test2& testRef;
  public:
    Test2( int x, const Test2& testObj ) : var(x), testRef(testObj) {}
};

私人:     Test2的&安培; testRef;     int var;

公共:     Test2(int x,Test2 testObj):var(x),testRef(testObj)     {

}

};

此外,您应该按照与声明相同的顺序进行初始化:

Test2(int x, const Test2& testObj) : testRef(testObj), var(x) {}