[英]Overriding a virtual function but not a pure virtual function?
我正在嘗試從A
和B
兩個類派生 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.