#include <bits/stdc++.h>
using namespace std;
class Base {
public:
virtual int function() const {
cout << "Base::function()\n";
return 1;
}
virtual void function(string) const {}
};
class Derived : public Base {
public:
// overloading function() of base
int function(int) const {
cout << "Derived::function()\n";
return 4;
}
};
int main()
{
string s("StackOverflow");
Derived d;
Base* b = &d;
//calling derived::function() and function(s)
b->function();
b->function(s);
}
Из-за перегрузки, имя скрывается в производном происходить подавление класса.
Из-за ключевого слова виртуальный во время исполнения Derived :: function() должен вызываться.перегрузки виртуальной функции и вызов функции, полученной с помощью указателя базового класса
Но код успешно компилируется. ссылка: http://ideone.com/fbVm0P
В чем причина этого странного поведения?
EDIT 1:
d.function();
d.function(s);
не обобщать, как и ожидалось.
Tangent: Почему вы включаете <бит/stdC++. H>? Это не предназначено для потребления пользователями, поскольку это внутренняя деталь реализации G ++. –
Вы вызываете базовый указатель, поэтому скрытие имени не имеет значения. –
У вас нет производной 'function()' у вас есть только не производная функция (int) '. Параметры имеют значение. Различные параметры означают разную функцию. – Galik