使用纯虚拟函数的实现初始化
Class with implementation of pure virtual function
我正在尝试实现一个基类,该基类包含一个纯虚拟函数,该基类将为其提供默认实现。目前,我的实现可以归结为:
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函数试图初始化基类对象。
相关文章:
- 如何实现使用 gcc-4.4 编译的大向量初始化?
- 在声明或实现中延迟初始化C++单一实例
- 为什么make_tuple的实现不会通过大括号初始化返回?
- 生产者消费者实现中的条件变量应如何初始化
- 如何在C++中实现初始化终结器
- 在某些情况下,如何理解允许实现将非局部变量的动态初始化视为静态初始化
- 如何实现便捷的初始化?
- 逗号分隔的初始化(如Eigen中的初始化)如何可能在C++中实现
- 我是否必须在函数的声明和实现中编写初始化列表
- c2797 成员初始值设定项列表或非静态数据成员初始值设定项中的列表初始化未实现
- C++编译器在 main 之后实现动态初始化
- 使用纯虚拟函数的实现初始化
- 抱歉,未实现:c++ 11中的非静态数据成员初始化器
- 尝试为特征矩阵实现一种初始化列表语法
- 如何初始化实现文件中的静态常量集<string>?
- 在c++中映射初始化以实现尝试
- 定义了静态初始化实现的顺序
- 如何实现RAII +延迟初始化
- 在C++中实现全局变量和静态成员变量的动态初始化
- 这两个矢量初始化是否实现相同的结果