Я пытаюсь реализовать базовый класс, который содержит чистую виртуальную функцию, которую базовый класс предоставит для реализации по умолчанию. В настоящее время моя реализация сводится к следующему:Класс с реализацией чистой виртуальной функции
class Base {
public:
Base(string bVar);
virtual string getVar() const =0;
private:
string myBVar;
};
Base::Base(string bVar){
this->myBVar = bVar;
}
string Base::getVar() const { //virtual function default implementation
return this->myBVar;
}
class Derived : public Base {
public:
Derived(string dVar);
string getVar() const; // implements pure virtual const base function
private:
string myDVar;
};
Derived::Derived(string dVar) : Base(""){
this->myDVar = dVar;
}
string Derived::getVar() const { //virtual
return this->myDVar;
}
int main(){
Base aBaseObj("param");
return 0;
}
Когда я скомпилировать этот код, я получаю эту ошибку:
error: cannot declare variable 'aBaseObj' to be of abstract type 'Base' with note: because the following virtual function are pure within 'Base' ...virtual std::string Base::getVar() const
Этот вопрос был задан before и ответил на. И я не могу понять, как мой код значительно отличается от принятого ответа. Когда я удаляю чистый виртуальный спецификатор, код компилируется и работает как ожидалось.
Где я ошибаюсь здесь в отношении маркировки функции моего базового класса как чистой виртуальной и предоставления реализации для нее, для которой производные классы должны обеспечивать их собственную реализацию?
Вы не можете создать экземпляр абстрактного класса. Ваш базовый класс содержит чистую виртуальную функцию, и экземпляр, таким образом, не может быть создан. –
@ Rishit взгляните на связанный вопрос. Как моя реализация отличается? – amoeba
Ваша реализация тела чистой виртуальной функции верна. Но вы не можете создать экземпляр вашего базового класса, поскольку он содержит чистые виртуальные функции. –