【发布时间】:2016-02-18 07:44:32
【问题描述】:
我正在尝试实现一个包含纯虚函数的基类,该基类将为其提供默认实现。目前,我的实现归结为:
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 并得到了回答。而且我无法弄清楚我的代码如何显着偏离接受的答案。当我删除纯虚拟说明符时,代码会按预期编译和运行。
关于将我的基类的函数标记为纯虚拟并为其提供派生类必须为其提供自己的实现的实现,我在哪里出错了?
【问题讨论】:
-
您不能创建抽象类的实例。您的基类包含一个纯虚函数,因此无法创建它的实例。
-
@Rishit 看看链接的问题。我的实现有何不同?
-
你的纯虚函数体的实现是正确的。但是你不能创建你的基类的实例,因为它包含纯虚函数。
-
提供基类实现通常是为了派生类有一个直观命名的支持函数,如果他们想要这种行为(可能与他们自己之前或之后的额外行动)。这并不意味着您可以直接创建基类对象。
-
@amoeba 你可以,除非它是一个纯虚函数......纯虚函数(与普通虚函数相反)的全部意义在于你不能创建一个包含一个的类。
标签: c++ oop polymorphism