Partilhar via


Funções virtuais particulares

A maneira como as funções virtuais privadas são tratados em classes derivadas foi alterada de extensões gerenciadas para C++ a Visual C++.

Em extensões gerenciadas, o nível de acesso de uma função virtual não restringe a possibilidade de ser substituído em uma classe derivada. Na nova sintaxe, uma função virtual não pode substituir uma função virtual da classe base que não pode acessar. Por exemplo:

__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();
};

Não há nenhum mapeamento real meio desse design na nova sintaxe. Um só tem que fazer os membros da classe base acessíveis - isto é, não privado. Os métodos herdados não precisam carregar o mesmo acesso. Neste exemplo, menos alteração invasora é tornar o membro protectedde MyBaseClass. Este modo de acesso ao programa geral do método com MyBaseClass é proibida ainda.

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

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

Observe que a ausência da palavra-chave explícito de virtual na classe base, na nova sintaxe, gerenciar uma mensagem de aviso.

Consulte também

Referência

Visibilidade do membro

Conceitos

Declarações de membro em uma classe ou uma interface (C++/CLI)