Fonctions virtuelles privées
Mise à jour : novembre 2007
La gestion des fonctions virtuelles privées dans les classes dérivées a été modifiée entre Extensions managées pour C++ et Visual C++ 2008.
En Extensions managées, le niveau d'accès d'une fonction virtuelle ne limite pas sa capacité à être substituée dans une classe dérivée. Dans la nouvelle syntaxe, une fonction virtuelle ne peut pas substituer une fonction virtuelle de classe de base à laquelle elle ne peut pas accéder. Par exemple :
__gc class Foo {
// inaccessible to a derived class
virtual void g();
};
__gc class Bar : public Foo {
public:
// in Managed Extensions, ok: g() overrides Foo::g()
// in new syntax, error: cannot override: Foo::g() is inaccessible …
void g();
};
Il n'existe aucun mappage de ce type dans la nouvelle syntaxe. Il suffit de rendre accessibles, c'est-à-dire non privés, les membres de la classe de base. Les méthodes héritées ne doivent pas porter le même accès. Dans cet exemple, la modification la moins perturbante est de rendre le membre Fooprotected. De cette manière, l'accès du programme général à la méthode via Foo reste interdit,
ref class Foo {
protected:
virtual void g();
};
ref class Bar : Foo {
public:
virtual void g() override;
};
Notez que l'absence du mot clé explicite virtual dans la classe de base, dans la nouvelle syntaxe, génère un message d'avertissement.
Voir aussi
Concepts
Déclarations de membre dans une classe ou interface