Pergunta

O idioma da interface nonvirtual descreve como os métodos virtuais são pontos de personalização não públicas, e métodos públicos são nonvirtual para permitir que a classe base para controlar em todos os momentos como os pontos de personalização são chamados.

Esta é uma expressão elegante e eu gosto de usá-lo, mas como ele funciona se a classe derivada é uma classe base em si

Foi útil?

Solução

Ele funciona, porque a classe derivada pode substituir uma função virtual privado de uma classe base, mesmo que a função de classe base sobrepõe a sua função de classe base.

Isto é perfeitamente legal:


class Parent
{
public:
  int foo() {return bar();} // the non-virtual public interface
private
  virtual int bar();
};

class Child : public Parent
{
private:
  virtual int bar();  // overrides Parent::bar()
};

class Grandchild : public Child
{
private:
  virtual int bar(); // overrides Child::bar();
};

Outras dicas

A classe derivada pode decidir por si mesmo:

Você pode simplesmente substituir o método completamente por implementar a função virtual. Você pode aumentar o método chamando as classes 'meio' funcionar em algum momento de seu método de classe derivada.

Se isso não é o que você quer, você precisa configurá-lo explicitamente na classe 'média'. Não que faria. Se você está desejando isso, isso provavelmente significa que você não deu a classe base pontos de personalização suficientes.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top