gpt4 book ai didi

C++ 多重继承 - 相同的方法名称 - 我可以以某种方式删除其中一个吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:03:49 26 4
gpt4 key购买 nike

我在 C++11 中有这个结构

struct A {
int idA;
void setId(int i) { idA = i;}
int getId() { return idA;}

virtual void foo() = 0;
};

struct B {
int idB;
void setId(int i) { idB = i;}
int getId() { return idB;}

virtual void foo2() = 0;
};

struct AB : public A, public B
{
void foo() override {}
void foo2() override {}
};

现在在 main 中我可以这样调用它:

AB * ab = new AB();
ab->B::setId(10);

但我真的不喜欢它。

还有其他解决办法吗? AB 中不需要 struct A 中的方法 setId/getId。我只是做了继承,因为我需要 foo() 和来自 A 的其他东西,但所有其他方法都是唯一的。

最佳答案

既然你说你不需要那些方法的A版本,你可以写

struct AB : public A, public B
{
void foo() override {}
void foo2() override {}

using B::setId;
using B::getId;
};

这会将 B 对这些方法的实现放入 AB 的命名空间中,并使调用它们变得明确。

关于C++ 多重继承 - 相同的方法名称 - 我可以以某种方式删除其中一个吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42736889/

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