簡體   English   中英

覆蓋 C++ 中的非虛擬方法

[英]Override a non-virtual method in C++

我有一個A類和一個從A繼承的B類。 A有一個foo方法,我想在B覆蓋它。

class A {
public:
    void foo();
    ...
}

class B: public A {
public:
    void foo();
    ...
}

對此的解決方案當然是將A::foo()定義為虛方法,將其聲明為virtual void foo(); . 但問題是我不能這樣做,因為A類是在第三方庫中定義的,所以我寧願不更改其代碼。

經過一番搜索,我找到了override關鍵字(因此B::foo的聲明將是void foo() override; ),但這對我沒有幫助,因為這不是override的用途override顯然只能使用以確保該方法確實覆蓋了另一個方法並且程序員沒有犯錯誤,並且如果該方法不是虛擬方法,則會生成錯誤。

我的問題是如何在不更改A任何代碼但僅更改B的代碼的情況下實現與使A::foo虛擬相同的效果?

有點晚了。 但是您可以根據具體類型使用 std::variant 和委托方法給兩個類 A 和 B。

如果您的編譯器不是最新的,請改用標記聯合。

暫無
暫無

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

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