【发布时间】:2021-10-02 07:37:02
【问题描述】:
最初基类 B 是从类 A 派生的。但是由于 C 从 A 和 B 派生,我陷入了令人讨厌的菱形继承,因此删除了 B 中的继承,选择了到 A 的转换函数。
现在,由于从未使用过转换为基类,我收到了 C 类类的警告。我该如何修复或删除这些?程序运行没有问题。
// base class providing most functionality
class A{
public:
int doStuff(){ return 0; };
};
// pure virtual interface providing a conversion to A
class B{
public:
virtual operator A&()=0;
};
// interface implementation
class C: public A, public B{
public:
virtual operator A&() override{return *this;}
};
警告:将永远不会使用将“C”转换为其基类“A”的转换函数
virtual operator A&() override{return *this;}
^
【问题讨论】:
-
那么虚拟继承呢?如果
B和C几乎都继承自A,那么您将在C中得到一个A实例... -
C c; A& a = c;不会使用你的operator A&;使用其他命名可能是可能的。 -
也许更简单:
B是否有任何理由不应该公开从A继承?如果不是,就这样做,如果C然后从B公开继承,它会自动从A继承,那么为什么要显式地从A再次继承呢? -
因为我的情况有点复杂,其中 C 不是从 A 继承,而是从 A 派生的类。不同的典型 C 类都继承自从 A 派生的不同类。接口 B 仅用于 A 提供的方法。
-
那么,您应该这样描述您的问题:
D继承自B和C,其中后两者都继承自A。但话又说回来:让B和C都虚拟地 从A继承,你就没有麻烦了:D接收A的单个实例。还是您无法修改C(显然您可以修改B)?
标签: c++ inheritance multiple-inheritance compiler-warnings