Funções Virtuais em C ++ e Java

Eu tenho lido sobre funções virtuais e descobri,

VF são usados ​​no polimorfismo de uma classe herdada.

Portanto, se uma classe e uma classe derivada tiverem o mesmo nome de função, a VF ligará a função apropriada à chamada de função.

Ou seja, se a função em questão é designada virtual na classe base, a função da classe derivada seria chamada. Se não for virtual, a função da classe base será chamada.

Por padrão, em Java: todas as funções são virtuais C ++: não virtuais e podem ser feitas virtuais em Java usando o modificador de acesso privado final, enquanto em C ++ usando a palavra-chave virtual para tornar uma função virtual.

Com base na teoria acima, escrevi o código:

#include <iostream>

class base{
    public : 
        virtual void function1(){
            std::cout<<"BaseVirtual"<<std::endl;
        }

        void function2(){
            std::cout<<"Base NonVirtual"<<std::endl;
        }
};


class derieved: public base
{
    public : 
        void function1(){
            std::cout<<"Derieved Virtual"<<std::endl;
        }

        void function2(){
            std::cout<<"Derieved NonVirtual"<<std::endl;
        }
};



int main()
{
    base b1;
    derieved d1;

    b1.function1();
    b1.function2();

    d1.function1();
    d1.function2();    

}

Agora, com base no fato, se sua função virtual é chamada de função de classe derivada, minha saída para o programa acima deve ser:

BaseVirtual
Base NonVirtual
Derieved Virtual
Base NonVirtual

no entanto, acabou por ser:

BaseVirtual
Base NonVirtual
Derieved Virtual
Derieved NonVirtual

que deve estar certo, claro. Então, minha pergunta é a saída viola totalmente a afirmaçãoSe a função em questão é designada virtual na classe base, a função da classe derivada seria chamada. Se não for virtual, a função da classe base será chamada. para a chamada:

  d1.function2();    

questionAnswers(3)

yourAnswerToTheQuestion