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í.