c++ - 具有纯虚函数实现的类

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

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

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/

相关文章:

c++ - 如何限制缓存内存ubuntu?

c++ - std::bind()、可变参数模板和完美转发如何结合?

java - 使用带参数的命令模式

c++ - 试图为我的日期类重载 operator++。仍然收到错误 : cannot increment value of type 'Date'

c++ - 我如何学习包含和链接到库?

c++ - 如何将 vector<unsigned char> 转换为 char*

c++ - 使用模板时获取 "Trigger Breakpoint Error at delete"

c++ - 多态对象复制

java - 为什么多态性不适用于 Java 中的重载方法?

c++ - 对指针和 C++ 多态性的引用