共用方式為


警告 C26434

函式 'derived::function' 會隱藏非虛擬函式 'base::function' (c.128)。

C++ Core Guidelines

C.128:虛擬函式應該只指定其中一個虛擬、覆寫或最終函式

備註

當您在基類中引進名稱與非虛擬函式相同的函式時,可能會發生非預期的行為。 就像引進與外部範圍名稱衝突的變數名稱一樣。 例如,您可能想要覆寫基類函式。 如果函式的簽章不相符,您預期的覆寫可能會改為變成多載。 一般而言,名稱隱藏很危險且容易出錯。

在核心指導方針中會檢查:

  • 只會檢查目前類別中的非覆寫函式。
  • 只會考慮基類的非虛擬函式。
  • 不會執行簽章比對。 如果不符合資格的名稱相符,則會發出警告。

範例

此範例示範衍生類別如何隱藏非虛擬函式,以及虛擬函式如何同時允許多載和覆寫:

// C26434.cpp
struct Base
{
    virtual ~Base() = default;
    virtual void is_virtual() noexcept {}
    void not_virtual() noexcept {}
};

struct Derived : Base
{
    void is_virtual() noexcept override {}      // Okay, override existing function
    virtual void is_virtual(int i) noexcept {}  // Add a virtual overload for function
    void not_virtual() noexcept {}              // C26434, hides a non-virtual function
    virtual void not_virtual(int i) noexcept {} // C26434, and parameters ignored
};