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
Conceitos
Declarações de membro em uma classe ou uma interface (C++/CLI)