override — переопределение функций в переполнении стека

#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 учебный класс?

2

Решение

  1. На самом деле он не переопределяется, поскольку его аргументы не имеют одинаковый тип.
  2. Так как он не переопределен, ваш указатель на Base знает только int метод, поэтому он выполняет сужающее преобразование (должно быть предупреждение) и вызывает Base::some_func(int),
4

Другие решения

вы перепутали перегрузку с переопределением,
Для переопределения подпись функции должна оставаться неизменной.
пожалуйста, проверьте документацию C ++ еще раз .. надеюсь, это полезно

2

По вопросам рекламы [email protected]