簡體   English   中英

覆蓋虛擬 function 但不是純虛擬 function?

[英]Overriding a virtual function but not a pure virtual function?

我正在嘗試從AB兩個類派生 class C 閱讀此答案后,我嘗試using B::<function>編寫,以便用B中的實現覆蓋A中的純虛擬 function 。

但是,該答案中的方法不適用於虛函數; 在那種情況下,我發現我需要更加明確。 那么顯然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();
}

我嘗試使用B::<function>編寫,以便用 B 中的實現覆蓋 A 中的純虛擬 function。

你誤會了。 以這種方式無法覆蓋function。 所有using B::h; 確實:它將B::h引入struct C的 scope 中,以便Xh(); in main()變得等價於XB::h(); . 因此, A::h()仍然是純虛擬的,因此您無法實例化struct C

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM