Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A "derived::function" függvény elrejt egy nem virtuális függvényt (base::function) (c.128).
C++ alapvető irányelvek
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
};