使用纯虚拟函数的实现初始化

Class with implementation of pure virtual function

本文关键字:实现 初始化 函数 虚拟      更新时间:2023-10-16

我正在尝试实现一个基类,该基类包含一个纯虚拟函数,该基类将为其提供默认实现。目前,我的实现可以归结为:

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;
}

当我编译这个代码时,我得到了这个错误:

错误:无法将变量"aBaseObj"声明为抽象类型"Base",并注意:因为以下虚拟函数在"Base"内是纯函数。。。虚拟std::string Base::getVar()const

这个问题以前被问过,现在已经得到了回答。我不知道我的代码是如何与公认的答案大相径庭的。当我删除纯虚拟说明符时,代码将按预期编译和运行。

在将基类的函数标记为纯虚拟并为其提供派生类必须提供自己实现的实现方面,我哪里错了?

纯虚拟函数是必须由派生类提供实现的虚拟函数。这是使虚拟函数纯净的原因之一,这样派生类就必须有它的实现。

CCD_ 1是纯虚函数,其中CCD_。

当类中有一个纯虚拟函数时,不需要创建类的实例。(否则,将功能设为纯虚拟功能没有多大意义)。这样的类是抽象类。

现在,在某些情况下,您可能希望拥有自己的纯虚拟函数实现,以便派生类可以直接使用它。因此,我们在一些情况下提供了纯虚拟函数体。

如果您想创建该类的实例,请不要将虚拟函数设为纯函数。

错误消息告诉您不能用纯虚拟函数分配类的对象。

这意味着您的问题是int main函数试图初始化基类对象。