Funções virtuais privadas

A forma particulares funções virtuais são tratadas em classes derivadas foi alterado de Managed Extensions for C++ para Visual C++.

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 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 deste tipo de design para a nova sintaxe.Um simplesmente tem que disponibilizar os membros de classe base – ou seja, não-particular.Métodos herdados não precisam ter o mesmo acesso.Neste exemplo, a alteração menos invasiva é que o membro MyBaseClass protected.Dessa maneira 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.

Consulte também

Referência

Visibilidade de membro

Conceitos

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