#include <iostream>
using namespace std;
class Base {
public:
virtual void some_func(int f1)
{
cout <<"Base is called: value is : " << f1 <<endl;
}
};
class Derived : public Base {
public:
virtual void some_func(float f1)
{
cout <<"Derived is called : value is : " << f1 <<endl;
}
};int main()
{
int g =12;
float f1 = 23.5F;
Base *b2 = new Derived();
b2->some_func(g);
b2->some_func(f1);
return 0;
}
Выход:
Base is called: value is : 12
Base is called: value is : 23
Почему второй звонок b2->some_func(f1)
призвание Base
функция класса, даже если есть версия с плавающей точкой в качестве аргумента, доступная в Derived
учебный класс?
Base
знает только int
метод, поэтому он выполняет сужающее преобразование (должно быть предупреждение) и вызывает Base::some_func(int)
,вы перепутали перегрузку с переопределением,
Для переопределения подпись функции должна оставаться неизменной.
пожалуйста, проверьте документацию C ++ еще раз .. надеюсь, это полезно