【发布时间】:2022-01-13 22:50:31
【问题描述】:
我正在尝试从 A 和 B 这两个类派生一个类 C;在阅读了this answer 之后,我尝试编写using B::<function>,以便用B 中的实现覆盖A 中的纯虚函数。
但是,该答案中的方法不适用于 pure 虚函数;在那种情况下,我发现我需要更加明确。
所以显然using 可以解决歧义,但它不能引入实现?
我只是希望能更好地了解这里发生了什么。
struct A {
// this would result in ambiguity:
//virtual void e(void) const {} // ERROR: member 'e' found in multiple base classes
// resolving ambiguity with 'using'
virtual void f(void) const {} // OK
// this would result in an unimplemented method:
//virtual void g(void) const = 0; // ERROR: variable type 'C' is an abstract class
// *** why doesn't this work? ***
//virtual void h(void) const = 0; // ERROR: variable type 'C' is an abstract class
// resolving ambiguity by explicitly defining what I want
virtual void i(void) const = 0; // OK
};
struct B {
void e(void) const {}
void f(void) const {}
void g(void) const {}
void h(void) const {}
void i(void) const {}
};
struct C : public A, public B {
using B::f; // sufficient to pin down 'f'
using B::h; // not sufficient to pin down 'h'
void i(void) const { B::i(); } // sufficient to pin down 'i'
};
int main() {
C X;
X.e();
X.f();
X.g();
X.h();
X.i();
}
【问题讨论】:
-
not enough to pin down 'h'“pin down”是什么意思?
-
我不确定问题是什么。您的示例似乎工作得很好,并且可以按照您的期望进行。 ideone.com/RqXpFe
标签: c++ abstract-class multiple-inheritance using virtual-functions