实现纯虚函数的类

时间:2015-11-17 03:05:08

标签: c++ oop polymorphism

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

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' ... virtual std :: string Base :: getVar()const

此问题已被问及before并已回答。而且我无法弄清楚我的代码如何与已接受的答案背道而驰。当我删除纯虚拟说明符时,代码将按预期编译并运行。

我在这里标记我的基础类别'作为纯虚函数并为它提供一个实现,派生类必须提供自己的实现?

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:2)

纯虚函数是虚函数,其实现必须由派生类提供。这是使你的虚函数变纯的原因之一,因此派生类必须具有它的实现。

virtual void function()=0是纯虚函数,其中=0表示它的纯度。

如果在类中有纯虚函数,则不应该创建类的实例。 (否则使功能纯虚拟没有多大意义)。这样的类是抽象类。

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

如果要创建该类的实例,请不要使您的虚函数变纯。