我有一个Playable
类,它由两个不同的类继承:Note
和Track.
Track
类具有Generator
类型的成员,该成员经常使用并且非常大。 Track还有一个Note-objects的多重映射。创建的每个音符始终会添加到正确的音轨中。
我的问题是,在某些情况下,Note类还需要访问Tracks
Generator-member.
我想通过提供一个Track &trackReference
成员来完成此操作,以便找到正确的Generator
到trackReference
,但问题是我无法使用默认值构造函数因为引用不能为空。有时我的Note对象只是空的,所以我真的需要一个默认的构造函数Note。
那么我该如何实现它以便我可以从每个Note中访问Generator对象?
答案 0 :(得分:1)
如果您的设计允许null实现,那么这是一条可能的路径。这是一个例子:
class foo
{
public:
virtual void bar() = 0;
};
class null_foo
: public foo
{
virtual void bar() {}
};
class C
{
public:
C(foo& f) : ref(f) {}
C() : ref(null_foo) {};
private:
foo& ref;
};
答案 1 :(得分:0)
您可以简单地使用Track*
代替Track&
,它也有很多优势来实现您不能使用引用的函数。例如:
bool HasParent() {return trackReference != NULL;}
Track& track() {return *trackReference;}