Sdílet prostřednictvím


Soukromé virtuální funkce

Způsob, jakým jsou privátní virtuální funkce řešeny v odvozených třídách, se změnil ze způsobu ze Správce rozšíření pro C++ na způsob ze Visual C++ 2010.

Ve Správci rozšíření úroveň přístupu virtuální funkce neomezuje její schopnost být překryta v rámci odvozené třídy. V nové syntaxi nemůže virtuální funkce překrýt virtuální funkci základní třídy, ke které nelze přistoupit. Příklad:

__gc class MyBaseClass {
   // inaccessible to a derived class 
   virtual void g();
};

__gc class MyDerivedClass : public MyBaseClass {
public:
   // okay in Managed Extensions; g() overrides MyBaseClass::g()
   // error in new syntax; cannot override: MyBaseClass::g() is inaccessible …
   void g();
};

Neexistuje žádné skutečné mapování tohoto druhu návrhu na novou syntaxi. Uživatel jednoduše musí zpřístupnit členy základní třídy – to znamená ne privátní. Zděděné metody nemusí mít stejný přístup. V tomto příkladu je nejméně invazivní změnit MyBaseClass tak, aby byl členem protected. Tímto způsobem je obecný přístup programu k metodě prostřednictvím MyBaseClass stále zakázán.

ref class MyBaseClass {
protected:
   virtual void g();
};

ref class MyDerivedClass : MyBaseClass {
public:
   virtual void g() override;
};

Všimněte si, že neexistence explicitního klíčového slova virtual v základní třídě, v rámci nové syntaxe, vygeneruje upozornění.

Viz také

Odkaz

Member Visibility

Koncepty

Členské deklarace v rámci třídy nebo rozhraní