Megosztás a következőn keresztül:


Figyelmeztetés C26434

A "derived::function" függvény elrejt egy nem virtuális függvényt (base::function) (c.128).

C++ alapvető irányelvek

C.128: A virtuális függvényeknek pontosan egyet kell megadniuk a következők közül: virtuális, felüldefiniálás vagy véglegesít

Megjegyzések

Ha olyan függvényt vezet be, amelynek neve megegyezik egy alaposztály nem virtuális függvényével, váratlan viselkedést kaphat. Ez olyan, mint egy változónév bevezetése, amely ütközik egy külső hatókörből származó névvel. Előfordulhat például, hogy szándékában állt egy alaposztályfüggvényt felülbírálni. Ha a függvények szignatúrái nem egyeznek, az Ön által szándékos felülbírálás túlterheléssé változhat. A névtitkolás általában veszélyes és hibalehetőséget jelent.

Az alapvető irányelvekben a következőket ellenőrzi:

  • Csak az aktuális osztály nem felülíró függvényei vannak ellenőrizve.
  • Csak az alaposztályok nem virtuális függvényei tekinthetők meg.
  • Nem történik aláírás-egyeztetés. Figyelmeztetések jelennek meg, ha a nem minősített nevek egyeznek.

példa

Ez a példa bemutatja, hogyan rejtheti el egy származtatott osztály a nem virtuális függvényeket, és hogy a virtuális függvények hogyan teszik lehetővé a túlterheléseket és a felülbírálásokat:

// 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
};