Erros, bugs, perguntas - página 1677

 
Sergei Vladimirov:
Eu não escrevi nada sobre preços de abertura e fecho.
Então devo tê-lo entendido mal - desculpe.
 

Porquê um erro para métodos privados?

class CFoo
  {
   private:
   void virtual func(int x) final { }
  };
 
class CBar : public CFoo
  {
   void func(int) { }
  };
 
fxsaber:

Porque é que existe um erro para métodos privados?

Particular não tem nada a ver com isso, a sua função é declarada como final e está a tentar anulá-la.

ZS. Eu tentei compilar - o compilador diz qual é o problema.

 
Sergei Vladimirov:
Privado não tem nada a ver com isto, declara esta função como definitiva.
Portanto, não há métodos privados de pais numa classe herdada. É por isso que não deve haver nenhum imperativo.
 
fxsaber:
Portanto, não existem métodos privados dos pais numa classe herdada. É por isso que não deve haver nenhum imperativo.
Bem, olá a todos.
 
Sergei Vladimirov:
Olá.
Herança pública. De acordo com o compilador, não estão disponíveis métodos privados dos descendentes dos pais.
 
fxsaber:
Herança pública. Os métodos privados do progenitor não estão disponíveis no descendente, de acordo com o compilador.

Um método virtual privado de uma classe base não pode ser chamado a partir de um herdeiro, mas pode anulá-lo, que é o que se está a tentar fazer.

 
Sergei Vladimirov:

Um método virtual fechado de uma classe base não pode ser chamado de um herdeiro, mas pode ser anulado.

Obrigado, eu não sabia disso. Algo que eu não consigo pensar onde isto seria útil. É muito semelhante ao X_Macro. Tentarei juntar um exemplo semelhante para obter uma melhor compreensão.
 
fxsaber:
Tentarei fazer um exemplo semelhante para obter uma melhor compreensão.

Isso é um toque agradável.

class BASE
{
private:
  void virtual Func() { Print(__FUNCSIG__); }
public:
  void Init() {Func();}
};

class CHILD : public BASE
{
private:
  virtual void Func() { Print(__FUNCSIG__); }
};

void OnStart()
{
  BASE* Base = new CHILD;
  
  Base.Init();
  
  delete(Base);
}

Acho que uma tal construção poderia vir a ser útil algures.

 
fxsaber:
património público. Os métodos privados dos pais não estão disponíveis no descendente, de acordo com o compilador.
Isto pode ser utilizado para fazer um análogo da palavra-chave final, proibindo explicitamente a continuação da herança.