使用父 class 方法覆盖的多重继承
Multiple inheritence using parent class method override
假设我有以下 class 层次结构,其中我有一个接口,然后进一步专门化该接口以保证更多功能:
class parent_interface {
public:
virtual void foo() = 0;
};
class child1_interface : public parent_interface {
public:
virtual void bar() = 0;
};
class child2_interface : public parent_interface {
public:
virtual void baz() = 0;
}
然后我有提供该功能的具体 classes:
class parent : public parent_interface {
public:
void foo() override;
};
class child1 : public parent, public child1_interface {
public:
//using parent::foo; ??
void bar() override;
};
问题是如果我尝试实例化一个 child1 对象,我会得到一个编译器错误
cannot declare field instantiation_name
to be of abstract type because the following virtual functions are pure within child1: void foo()
我可以通过在 child1 中创建一个名为 foo 的方法来解决这个问题,它只调用 parent::foo,但我想知道是否有更清晰的解决方案来解决这个问题。
您需要指定 virtual
继承,以便编译器知道将基础 类 组合回一个。这应该为您编译 (see it work):
class parent_interface {
public:
virtual void foo() = 0;
};
class child1_interface : public virtual parent_interface {
public:
virtual void bar() = 0;
};
class parent : public virtual parent_interface {
public:
void foo() override
{
}
};
class child1 : public parent, public child1_interface {
public:
//using parent::foo; ??
void bar() override
{
}
};
有关详细信息,您可以在此处阅读有关 Virtual Base Classes 的内容。
假设我有以下 class 层次结构,其中我有一个接口,然后进一步专门化该接口以保证更多功能:
class parent_interface {
public:
virtual void foo() = 0;
};
class child1_interface : public parent_interface {
public:
virtual void bar() = 0;
};
class child2_interface : public parent_interface {
public:
virtual void baz() = 0;
}
然后我有提供该功能的具体 classes:
class parent : public parent_interface {
public:
void foo() override;
};
class child1 : public parent, public child1_interface {
public:
//using parent::foo; ??
void bar() override;
};
问题是如果我尝试实例化一个 child1 对象,我会得到一个编译器错误
cannot declare field
instantiation_name
to be of abstract type because the following virtual functions are pure within child1: void foo()
我可以通过在 child1 中创建一个名为 foo 的方法来解决这个问题,它只调用 parent::foo,但我想知道是否有更清晰的解决方案来解决这个问题。
您需要指定 virtual
继承,以便编译器知道将基础 类 组合回一个。这应该为您编译 (see it work):
class parent_interface {
public:
virtual void foo() = 0;
};
class child1_interface : public virtual parent_interface {
public:
virtual void bar() = 0;
};
class parent : public virtual parent_interface {
public:
void foo() override
{
}
};
class child1 : public parent, public child1_interface {
public:
//using parent::foo; ??
void bar() override
{
}
};
有关详细信息,您可以在此处阅读有关 Virtual Base Classes 的内容。