gpt4 book ai didi

c++ - 如何从实现与其他接口(interface)共享的接口(interface)的类继承

转载 作者:搜寻专家 更新时间:2023-10-31 01:30:30 24 4
gpt4 key购买 nike

我有这个示例代码:

#include <iostream>

struct Interface1
{
virtual int getID()=0;
};

struct Interface2 : Interface1
{
virtual int add(int a,int b)=0;
};

struct Base1 : Interface1
{
virtual int getID() override { return 1; }
};

struct myClass: Interface2, Base1
{
virtual int add(int a,int b) override { return a+b; }
};

int main()
{
myClass c;
std::cout << c.add(0, 1) << "\n";
}

想法是myClass基于Interface2,但是使用Base1作为Interface1的实现。当我编译这段代码时,出现了这个错误:

getId is ambiguous. 

我该如何解决?

最佳答案

问题是 myClassInterface1 继承了两次(一次从 Interface1,一次从 Base1) ,从而继承了两个纯虚函数(myClass::getIDBase1::getID)。由于只实现了其中一个,如果您尝试创建一个 myClass 对象,编译器会提示 myClass 是抽象类型。这是对的。

解决方案(除了使用更简单的继承之外)是让您的类虚拟地从 Interface1 继承:

#include <iostream>

struct Interface1
{
virtual int getID()=0;
};

struct Interface2 : virtual Interface1
{
virtual int add(int a,int b)=0;
};

struct Base1 : virtual Interface1
{
virtual int getID() override { return 1; }
};

struct myClass: Interface2, Base1
{
virtual int add(int a,int b) override { return a+b; }
};

int main()
{
myClass c;
std::cout << c.getID() << "\n"; // prints 1
}

关于c++ - 如何从实现与其他接口(interface)共享的接口(interface)的类继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47772396/

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