首先,我很抱歉这是一个很糟糕的问题。我是C++的新手。

我有一组包含引用类型字段的类头,它是一个接口(interface)(由纯虚函数构建的类)。我想初始化我的类,以便默认情况下将引用类型字段设置为某个“具体”派生类,而这是使用默认构造函数(无参数!)完成的。我还希望能够用另一个“具体的”派生类覆盖此初始化。

到目前为止,我的类头如下:

class Foo {

public:

Foo();

Foo(IBar & bar);

protected:

/* Update 1: const field */
const IBar & bar;

...
}

但是我正在努力实现:
/* Is it possible to create the reference type through the initialisation list? */

/* Update 2: corrected initialisation of bar field from "BarDerivedA() bar" to "BarDerivedA()" */
Foo::Foo()
: bar(BarDerivedA())
{

}

/* Override */
Foo::Foo(IBar & bar)
: bar(bar)
{

}

更新
我们发现使用这种潜在的设计将不会有效。带有字段的每个类的const IBar & bar的默认对象几乎总是相同的对象,单元测试除外-我们希望能够根据需要交换模拟类。

我不想在堆栈上不断创建相同的对象,因此将在工厂中为这些对象组工作。

我沿着单个构造函数的路线走了,如下所示:
Foo::Foo(IBar & bar)
: bar(bar)
{

}

如果有人想提供有关初始化列表中临时对象的类引用字段设置的适当答案(即只能对const字段执行此操作,并且将超出构造函数的范围),则将其标记为接受的答案。或者,将其标记为适当的拷贝。

最佳答案

您可以在类中添加默认对象,例如:

class Foo {
public:
    Foo() : bar(defaultBar);{}
    Foo(IBar& bar) : bar(bar) {}

protected:
    const BarDerivedA defaultBar; // Before the reference.
    const IBar& bar;
};

关于c++ - 是否可以通过初始化列表初始化引用类型?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28666489/

10-11 22:50
查看更多