gpt4 book ai didi

c++ - 接口(interface)继承

转载 作者:行者123 更新时间:2023-12-03 23:01:19 25 4
gpt4 key购买 nike

我目前正试图围绕 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;
}
这里我有两个具有继承关系的接口(interface)。实现接口(interface)的两个类也是如此。
这给了我以下编译器错误:
C2259 'ClassInherited': cannot instantiate abstract class
看来类 类继承不继承 的实现一些方法来自 类库 .因此它是抽象的,不能被实例化。
我需要如何修改这个简单的例子才能让 类继承 继承所有已实现的方法类库 ?

最佳答案

您遇到的是 diamond problem .
解决方案是使用 virtual inheritance ( Live ),以确保只有一个基类成员的拷贝被孙子继承:

// Interfaces
class InterfaceBase
{
public:
virtual void SomeMethod() = 0;
};

class InterfaceInherited : virtual public InterfaceBase
{
};

// Classes
class ClassBase : virtual public InterfaceBase
{
public:
virtual void SomeMethod()
{
}
};

class ClassInherited : public ClassBase, public InterfaceInherited
{
};

int main()
{
ClassBase myBase; // OK
ClassInherited myInherited; // OK
return 0;
}

关于c++ - 接口(interface)继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65559810/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com