【发布时间】:2021-04-10 01:50:39
【问题描述】:
我目前正在尝试围绕 C++ 继承的基础知识。考虑以下代码:
// Interfaces
class InterfaceBase
{
public:
virtual void SomeMethod() = 0;
};
class InterfaceInherited : public InterfaceBase
{
};
// Classes
class ClassBase : public InterfaceBase
{
public:
virtual void SomeMethod()
{
}
};
class ClassInherited : public ClassBase, public InterfaceInherited
{
};
int main()
{
ClassBase myBase; // OK
ClassInherited myInherited; // Error on this line
return 0;
}
这里我有两个具有继承关系的接口。实现接口的两个类也是如此。
这给了我以下编译器错误:
C2259 'ClassInherited': cannot instantiate abstract class
似乎ClassInherited类没有从ClassBase继承SomeMethod的实现。因此它是抽象的,不能被实例化。
为了让 ClassInherited 从 ClassBase 继承所有已实现的方法,我需要如何修改这个简单的示例?
【问题讨论】:
-
在这种情况下,无需再次从
InterfaceInherited继承ClassInherit。它已经从ClassBase继承了该接口。 -
事实上它继承自
ClassBase和InterfaceInherited,但是最后一个没有定义SomeMethod的实现,所以一个还在ClassInherited中挂起;这使得ClassInherited抽象,所以不是固定不变的。
标签: c++ inheritance interface