Funciones virtuales en C ++ y Java

He estado leyendo sobre funciones virtuales y he encontrado,

VF se utilizan en el polimorfismo de una clase heredada.

Entonces, si una clase y una clase derivada tienen el mismo nombre de función, VF enlaza la función apropiada a la llamada de función.

es decir, si la función en cuestión se designa como virtual en la clase base, se llamará a la función de la clase derivada. Si no es virtual, se llamará a la función de la clase base.

En Java de forma predeterminada: todas las funciones son Virtual C ++: No virtual y se pueden convertir en Virtual en Java mediante el uso del modificador de acceso privado final, mientras que en C ++ se usa la palabra clave Virtual para hacer que una función sea virtual.

Basado en la teoría anterior, escribí el 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();    

}

Ahora, basado en el hecho, si es una función virtual, entonces solo se llama a la función de clase derivada, mi salida para el programa anterior debe ser:

BaseVirtual
Base NonVirtual
Derieved Virtual
Base NonVirtual

Sin embargo, resultó ser:

BaseVirtual
Base NonVirtual
Derieved Virtual
Derieved NonVirtual

que debe ser correcto por supuesto. Así que mi pregunta es la salida totalmente viola la declaración.Si la función en cuestión se designa como virtual en la clase base, se llamará a la función de la clase derivada. Si no es virtual, se llamará a la función de la clase base. para la llamada:

  d1.function2();    

Respuestas a la pregunta(3)

Su respuesta a la pregunta