首先,如果有另一篇帖子回答这个问题,我深表歉意,我发现的所有类似帖子都涉及钻石继承方案或定义的函数,而这不是。
简而言之,我想知道是否可以让一个类从其他两个类继承,其中两个子类都有一个具有相同名称和参数的函数,但它在一个子类中定义,而在另一个子类中定义为纯虚拟。此外,如果我能做到这一点,在纯虚拟/抽象类上调用函数最终会在对派生类的更改最小的情况下调用另一个子类上的定义函数吗?
例子:
class A
{
public:
virtual void Set(int X) = 0;
};
class B
{
public:
virtual void Set(int X);
};
class AB : public A, public B
{
//other methods not relevant to example go here
};
int main(int argc, char **argv)
{
int Y = 5;
A* ObjectA = new AB();
ObjectA->Set(Y);
return 0;
}
到目前为止,我尝试编译这个基本示例时遇到了如下错误:
“AB”:由于以下成员,无法实例化抽象类:“void A::Set(int)”:是抽象的
在进行自己的研究时,我找不到明确的答案,但基于其他涉及相关主题的问题,我发现在 AB 类中使用“使用 B::Set”可能会对此有所帮助。但是当我尝试将它添加到 AB 类定义时,错误仍然存在。
有什么办法可以使这项工作?