Funções de virtuais Private
A maneira como são tratadas em classes derivadas de funções de virtuais private foi alterado a partir de Managed Extensions for C++ para Visual C++ 2010.
O nível de acesso de uma função virtual Managed Extensions não restrinja a capacidade de ser substituído em uma classe derivada. Na sintaxe de novo, uma função virtual não pode substituir uma função virtual da classe base que não pode acessar. For example:
__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 desse tipo de design para a nova sintaxe. Simplesmente, é preciso disponibilizar os membros da classe base – ou seja, não-particulares. Os métodos herdados não é necessário que você deve ter o mesmo acesso. Neste exemplo, a alteração de menos invasiva é que o membro MyBaseClass protected. Dessa forma o acesso do programa geral para o método por meio de MyBaseClass ainda é proibido.
ref class MyBaseClass {
protected:
virtual void g();
};
ref class MyDerivedClass : MyBaseClass {
public:
virtual void g() override;
};
Observe que a ausência de explícita virtual palavra-chave na classe base, sob a nova sintaxe, gera uma mensagem de aviso.