В моей программе C++:виртуальные функции в C++
#include<iostream.h>
class A
{
public:
virtual void func()
{
cout<<"In A"<<endl;
}
};
class B:public A
{
public:
void func()
{
cout<<"In B"<<endl;
}
};
class C:public B
{
public:
void func()
{
cout<<"In C"<<endl;
}
};
int main()
{
B *ptr=new C;
ptr->func();
}
оператор должен вызвать B::func()
. Однако вызывается функция, C::func()
. Пожалуйста, пролите свет на это. После удаления виртуального ключевого слова в классе «А» этого больше не происходит.
Но разве факт, что я переопределял func() в классе B, отвлекает виртуальную природу функции? –
Прочтите FAQ :) Если вы создаете метод виртуальный в базовом классе, нет необходимости помещать ключевое слово 'virtual' в любой производный класс - он будет виртуальным в любом случае. Если вы * перегрузили * функцию как с разными параметрами, то она будет работать практически не. –