Виртуальные функции в 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();