作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有这个代码:
class A
{
public:
virtual void FA()=0;
};
class B: public A
{
public:
virtual void FB()=0;
};
class Imp_A: public A
{
public:
void FA()
{
// implement FA
}
};
class Imp_B :public Imp_A, public B
{
public:
void FB()
{
// implement FB by calling FA()
FA();
// do some more work here.
}
};
在类 Imp_B 中,我不想实现 FA,因为它已经在此类基于的 Imp_A 中实现。
但是当我尝试编译我的代码时,我收到错误消息,指出 Imp_B 是虚拟的,无法实例化。
同样,当我尝试在 FB 中调用 FA 时,我收到 FA 不明确的错误。
我该如何解决这个问题?
最佳答案
这看起来像是经典的“菱形继承(钻石问题)问题”,您在基类中定义了一个虚方法,该基类被两个或多个用作多重继承源的其他类继承。
无论如何 - 虚拟继承是您问题的答案
class A
{
public:
virtual void FA()=0;
}
class B: virtual public A
{
public:
virtual void FB()=0; //probably a pure virtual function as well!?
}
class Imp_A: virtual public A
{
public:
void FA()
{
// implement FA
}
}
class Imp_B :public Imp_A, public B //since you call FA() you need it's implementation from Imp_A
{
public:
void FB()
{
// implement FB by calling FA()
FA();
// do some more work here.
}
}
这里的问题是 Imp_b 最终以来自两个 A 类定义的 FA 定义结束;使用虚拟继承有助于解决这个问题。
关于c++ - C++中的多重继承与虚函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35724158/
我有一个特别的问题想要解决,我不确定是否可行,因为我找不到任何信息或正在完成的示例。基本上,我有: class ParentObject {}; class DerivedObject : publi
在我们的项目中,我们配置了虚 URL,以便用户可以在地址栏中输入虚 URL,这会将他们重定向到原始 URL。 例如: 如果用户输入'http://www.abc.com/partner ',它会将它们
我是一名优秀的程序员,十分优秀!