我正在尝试实现一个包含纯虚函数的基类,该基类将为其提供默认实现。目前,我的实现归结为:
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并回答了。而且我无法弄清楚我的代码如何显着偏离已接受的答案。当我删除纯虚拟说明符时,代码会按预期编译和运行。
关于将我的基类函数标记为纯虚拟函数并为其提供派生类必须为其提供自己的实现的实现,我哪里出错了?
最佳答案
纯虚函数是其实现必须由派生类提供的虚函数。这是使虚函数纯的原因之一,因此派生类必须具有它的实现。
virtual void function()=0
是纯虚函数,其中 =0
表示它是纯的。
当你在一个类中有一个纯虚函数时,你不应该创建一个类的实例。 (否则使功能纯虚拟没有多大意义)。这样的类就是抽象类。
现在,在某些情况下,您可能希望拥有自己的纯虚函数实现,以便派生类可以直接使用它。因此在某些情况下我们提供纯虚函数体。
如果你想创建那个类的实例,不要让你的虚函数是纯的。
关于c++ - 具有纯虚函数实现的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33748444/