在子类中实现纯虚方法
Implementing pure virtual method in subclass
我正在子类中实现父类的纯虚函数。
当我尝试在eclipse中实例化子类时它显示
类型'derived'必须实现继承的纯虚方法'Base::compareTo'
我很确定我是这么做的。我的基类是…
base.h
#ifndef BASE_H_
#define BASE
class Base{
public:
Base();
virtual ~Base();
virtual int compareTo(void* compare)=0;
};
#endif /* BASE*/
那么我的导数。h
#ifndef DERIVED_H_
#define DERIVED_H_
#include "Base.h"
class Derived : public Base {
public:
int x;
Derived(int y);
virtual ~Derived();
int compareTo(void* compare);
};
#endif /* DERIVED_H_ */
Derived.cpp
#include "Derived.h"
#include "Base.h"
Derived::Derived(int y) {
// TODO Auto-generated constructor stub
x=y;
}
Derived::~Derived() {
// TODO Auto-generated destructor stub
}
int Derived::compareTo(void* compare) {
Derived* compared;
int result=0;
if(compared=dynamic_cast<Derived*>(compare))
{
if(x<compared->x)
{
result=-1;
}
else
{
result=1;
}
}
return result;
}
我假设此消息来自eclipse代码分析器,而不是来自编译器。代码分析器是错误的,你是正确的。您已经从Derived
中的基类正确地实现了纯虚方法。如果您尝试实例化Derived,代码应该可以编译。
您的CDT版本可能小于8.2.1?如果是这样,你可能会遇到这个错误,应该在8.2.1中修复。
你的代码中还有一个bug。不能动态强制转换void指针
试试下面的基类代码:
#ifndef BASE_H_
#define BASE_H_
class Base{
public:
//Base (); not needed in the virtual class
virtual ~Base() {};
virtual int compareTo(void* compare)=0;
};
#endif /* BASE*/
#ifndef DERIVED_H_
#define DERIVED_H_
#include "Base.h"
class Derived : public Base {
public:
int x;
Derived(int y);
virtual ~Derived();
int compareTo(void* compare) override/*C++11*/;
};
#endif /* DERIVED_H_ */
#include "Derived.h"
//#include "Base.h" Not needed
Derived::Derived(int y) {
// TODO Auto-generated constructor stub
x=y;
}
Derived::~Derived() {
// TODO Auto-generated destructor stub
}
int Derived::compareTo(void* compare) {
Derived* compared;
int result=0;
if(compared=dynamic_cast<Derived*>(compare))
{
if(x<compared->x)
{
result=-1;
}
else
{
result=1;
}
}
return result;
}
相关文章:
- 使用非递归插入方法实现 AVL 树
- C++方法实现:是否可以避免每次都键入类名?
- 如何使用吸气剂方法实现C++封装
- 在C++中使用克隆方法实现多晶型效果
- 使用本机 JNI 静态方法实现C++ Java 运行时错误
- 双向链表插入方法实现 - 正在搜索哪个节点
- 没有虚拟调度的默认方法实现
- C 构造函数和方法实现
- C :如何使用相同的数据类使用不同的方法实现
- 将同一类的方法实现放在不同的对象文件中
- 私有方法实现编译错误
- 使用公共命名方法实现非公共赋值运算符
- 使用 SFINAE 在 Clase 模板中选择不同的方法实现
- 如何根据方法实现的声明顺序对其进行排序
- 使用一个方法实现不同类型赋值的优雅方式,并且没有警告
- 在运行时选择方法实现
- 将参数传递给c++ CORBA方法实现
- 静态constexpr方法实现导致GCC错误
- 包括c++中的头文件(类定义和方法实现)
- 如何在swig生成的代理类中更改特定的方法实现