Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 类与纯虚函数的实现_C++_Oop_Polymorphism - Fatal编程技术网

C++ 类与纯虚函数的实现

C++ 类与纯虚函数的实现,c++,oop,polymorphism,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::getV

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

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

这一问题已于年月日提出并得到答复。我不知道我的代码与公认的答案有多大的偏差。当我删除纯虚拟说明符时,代码会按预期编译和运行


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

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


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

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


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

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

virtualvoid function()=0
是纯虚拟函数,其中
=0
表示其纯度

当类中有纯虚函数时,不应创建类的实例。(否则,将函数设置为纯虚拟就没有多大意义)。这样的类是抽象类

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


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

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

virtualvoid function()=0
是纯虚拟函数,其中
=0
表示其纯度

当类中有纯虚函数时,不应创建类的实例。(否则,将函数设置为纯虚拟就没有多大意义)。这样的类是抽象类

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


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

不能创建抽象类的实例。您的基类包含一个纯虚函数,因此无法创建它的实例。@请看链接的问题。我的实现有什么不同?您对纯虚拟函数体的实现是正确的。但是您不能创建基类的实例,因为它包含纯虚拟函数。提供基类实现通常是这样做的,即派生类具有直观命名的支持函数,它们可以通过自己对纯虚拟函数的重写显式调用,如果它们需要这种行为的话(可能在之前或之后有他们自己的附加动作)。这并不意味着你可以直接创建基类对象。@amoeba你可以,除非它是纯虚函数……纯虚函数的全部要点(与普通虚函数相反)就是你不能创建一个包含一个实例的类的实例。你不能创建一个抽象类的实例。你的基类包含一个纯虚函数,因此它的实例不能创建。@Rishit看一看链接的问题。我的实现有什么不同?你对纯虚函数体的实现是正确的t、 但是您不能创建基类的实例,因为它包含纯虚拟函数。提供基类实现通常是这样做的,即派生类具有直观命名的支持函数,它们可以通过自己对纯虚拟函数的重写显式调用,如果它们需要这种行为的话(可能在之前或之后有他们自己的附加动作)。这并不意味着你可以直接创建基类对象。@amoeba你可以,除非它是纯虚拟函数……纯虚拟函数(与普通虚拟函数相反)的全部要点是你不能创建包含基类对象的类的实例。