Виртуальные функции в C ++ и Java

Я читал о виртуальных функциях и нашел,

VF используются при полиморфизме наследственного класса.

Таким образом, если класс и производный класс имеют одинаковое имя функции, VF связывает соответствующую функцию с вызовом функции.

т.е. если рассматриваемая функция обозначена как виртуальная в базовом классе, то будет вызвана функция производного класса. Если он не является виртуальным, будет вызвана функция базового класса.

В Java по умолчанию: все функции виртуальные C ++: не виртуальные, и их можно сделать виртуальными в Java с помощью окончательного модификатора частного доступа, а в C ++ с помощью ключевого слова Virtual сделать функцию виртуальной.

Основываясь на приведенной выше теории, я написал код:

#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();    

}

Теперь, исходя из того факта, что если это виртуальная функция, то вызывается только функция производного класса, мой вывод для вышеуказанной программы должен быть:

BaseVirtual
Base NonVirtual
Derieved Virtual
Base NonVirtual

однако, оказалось, что это:

BaseVirtual
Base NonVirtual
Derieved Virtual
Derieved NonVirtual

что должно быть правильно, конечно. Так что мой вопрос - вывод полностью нарушает утверждениеЕсли рассматриваемая функция обозначена как виртуальная в базовом классе, то будет вызвана функция производного класса. Если он не является виртуальным, будет вызвана функция базового класса. для звонка:

  d1.function2();    

Ответы на вопрос(3)

Ваш ответ на вопрос