我的问题是基于典型的钻石层次结构,但不是典型的钻石问题。
class Interface
{
public:
int value;
// SomeBigData &data;
Interface(int _value = 0) : value(_value) {};
virtual void function1() = 0;
virtual void function2() = 0;
};
class ImpOne : public virtual Interface
{
public:
void function1() { ++value; }
};
class ImpTwo : public virtual Interface
{
public:
void function2() { --value; }
};
class Device : public ImpOne, public ImpTwo
{
public:
Device() : Interface(7) {};
};
有一个抽象接口定义了许多功能(上面的例子被简化了)。然后有一些实现类一次只实现其中的几个功能。最后,还有一个非抽象类,如上面的 Device 类,通过将几个实现类组合在一起来实现整个接口。
现在,问题是这样的:
Interface 类中有一个整数元素,它由类 Device 初始化并在实现类之间共享,到目前为止一切都很好。但是如果我= 0
从Interface(int _value = 0)
构造函数中删除,整个系统就会崩溃,因为我缺少接口类的默认构造函数,这有点奇怪,因为它永远不会被调用。
为什么这会困扰我?正如代码中所建议的,Interface 类需要包含对复杂数据结构(不属于该类)的引用,而不是在所有派生实现类之间共享。然而,为引用指定默认值既不明智也不可能。
所以问题是:
如何正确初始化接口类(引用)元素,例如SomeBigData &data
代码中建议的,我无法为默认构造函数指定默认值(无论如何都不会调用)?还是我做错了什么?