У меня есть чистый виртуальный базовый класс и производный класс. Я знаю, что мне разрешено реализовать виртуальный (не чистый) метод в базовом классе. То, что я не понимаю, почему я HAVE
также реализовать один и тот же метод в производном классе, если то, что я хочу просто использовать базовую реализацию:Почему мне нужно реализовать виртуальную функцию в производном классе, если я хочу использовать реализацию базового класса
#include <iostream>
using namespace std;
class Abstract {
public:
int x;
Abstract(){
cout << "Abstract constructor" << endl;
x = 1;
}
virtual void foo() = 0;
virtual void bar(){
cout << "Abstract::bar" << endl;
}
};
class Derived : Abstract {
public:
int y;
Derived(int _y):Abstract(){
cout << "Derived constructor" << endl;
}
virtual void foo(){
cout << "Derived::foo" << endl;
}
virtual void bar(){
Abstract::bar();
}
};
int main()
{
cout << "Hello World" << endl;
Derived derived(2);
derived.foo();
derived.bar(); //HERE I HAVE TO DEFINE Derived::bar to use it
return 0;
}
В 'Derived' say' using Abstract :: bar() '? Также создайте 'Abstract' базовый класс' public'. –
Нет причин, по которым 'bar' * must * должен быть реализован в производном классе. Какие ошибки вы говорите, что это неправильно? –
Ваш вопрос основан на совершенно неправильной посылке. Вам не нужно переопределять нечистые функции-члены из базового класса. Что заставило вас думать, что вам нужно это сделать? – AnT