Pergunta

Minha pergunta provavelmente será melhor explicada por um exemplo.

Por exemplo, eu tenho 2 classes: uma classe base e uma classe derivada:

class baseClass
{
public:
    baseClass()
    {
        foo();
    }
    virtual bool foo() { printf("baseClass"); return false;}

};

class derivedClass : public baseClass
{
public:
    bool foo()
    {
        printf("derivedClass");
        return true;
    }

};

Quando eu crio uma instância de derivedClass, o construtor em baseClass será chamado e foo() será chamado de seu construtor. O problema é que o construtor do Baseclass está chamando de foo() e não o substituto foo() que a classe derivada foi substituída. Existe alguma maneira de fazer com que a base de base chamada de função substituída, não é a própria definição da função?

Foi útil?

Solução

Você não deve chamar um método virtual de um construtor porque o objeto ainda não foi totalmente construído. Essencialmente, a classe derivada ainda não existe, portanto, seus métodos não podem ser chamados.

Outras dicas

Na maioria das línguas, esse comportamento é proibido ou indefinido, por boas razões.

Considere o seguinte: o construtor da classe base é executado antes do construtor da subclasse; portanto, qualquer Vars definido pela subclasso será não inicializado. Tem certeza de que deseja chamar o método subclassificado nessas circunstâncias?

A alternativa mais simples é definir um método Initialize () na sua superclasse e lembre -se de chamar Initialize () do seu construtor de subclasse.

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