覆盖虚函数而不是纯虚函数?

Overriding a virtual function but not a pure virtual function?

我试图从两个 class 中推导出 class CAB;阅读 后,我尝试编写 using B::<function> 以便使用 B.

中的实现覆盖 A 中的纯虚函数

但是,该答案中的方法不适用于 虚函数;在那种情况下,我发现我需要更明确。 那么明明 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();
}

I attempted to write using B::<function> in order to override a pure virtual function in A with the implementation in B.

你误会了。用这种方式 覆盖 函数是不可能的。 using B::h; 所做的一切:它将 B::h 引入 struct C 的范围,因此 main() 中的 X.h(); 等同于 X.B::h();。所以,A::h() 仍然是纯虚拟的,因此你不能实例化 struct C.