Errores, fallos, preguntas - página 1677

 
Sergei Vladimirov:
No he escrito nada sobre los precios de apertura y cierre.
Entonces debo haberte entendido mal - lo siento.
 

¿Por qué un error para los métodos privados?

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

¿Por qué hay un error en los métodos privados?

Private no tiene nada que ver, tu función está declarada como final y estás intentando anularla.

ZS. Traté de compilar - el compilador dice cuál es el problema.

 
Sergei Vladimirov:
Private no tiene nada que ver, se declara esta función como final.
Así que no hay métodos privados de los padres en una clase heredada. Por eso no debería haber ninguna anulación.
 
fxsaber:
Por lo tanto, no hay métodos privados de los padres en una clase heredada. Por eso no debería haber ninguna anulación.
Bueno, hola.
 
Sergei Vladimirov:
Hola.
Herencia pública. Desde el descendiente los métodos privados del padre no están disponibles, según el compilador.
 
fxsaber:
Herencia pública. Los métodos privados del padre no están disponibles en el descendiente, según el compilador.

Un método virtual privado de una clase base no puede ser llamado desde un heredero, pero sí puedes anularlo, que es lo que estás intentando hacer.

 
Sergei Vladimirov:

Un método virtual cerrado de una clase base no puede ser llamado desde un heredero, pero puede ser sobrescrito.

Gracias, no lo sabía. No se me ocurre en qué podría ser útil. Es muy similar a X_Macro. Intentaré poner un ejemplo similar para que se entienda mejor.
 
fxsaber:
Intentaré hacer un ejemplo similar para que se entienda mejor.

Es un bonito detalle.

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

Supongo que una construcción así podría ser útil en algún momento.

 
fxsaber:
herencia pública. Los métodos privados del padre no están disponibles en el descendiente, según el compilador.
Esto se puede utilizar para hacer un análogo de la palabra clave final, prohibiendo explícitamente la herencia posterior.