【发布时间】:2021-08-21 04:40:16
【问题描述】:
我目前正在将一个项目从 Java 转换为 C++。我使用基类作为接口类,我使用派生类作为“接口”类的子类。现在,我遇到了关于基类和派生类的问题。以下是 CPP 文件中的一些代码:
enum class State {
START, INTEGER, DECIMAL, END
};
class Edge {
private:
State currentState;
InputVerifier inputVerifier;
Action action;
State nextState;
public:
Edge(State _currentState, InputVerifier _inputVerifier, Action _action, State _nextState) {
currentState = _currentState;
inputVerifier = _inputVerifier;
action = _action;
nextState = _nextState;
}
};
Edge machine[1] = {
Edge(State::START, DigitInputVerifier(), ValueIsDigitAction(), State::INTEGER)
};
以及头文件中的一些代码:
class InputVerifier {
public:
virtual bool meetsCriteria(char c) = 0;
};
class Action {
public:
virtual InterimResult execute(InterimResult x, char c) = 0;
};
class ValueIsDigitAction: public virtual Action {
public:
InterimResult execute(InterimResult x, char c) override {
x.setV(c - '0');
return x;
}
};
class DigitInputVerifier: public virtual InputVerifier {
public:
bool meetsCriteria(char c) override {
if (c >= '0' && c <= '9') {
return true;
}
return false;
}
};
InterimResult 是另一个类,但这不是问题。我一直在尝试编译它,但我不断遇到的错误之一是错误:无法将参数“_inputVerifier”声明为抽象类型“InputVerifier”。我一直在尝试搜索此问题,但运气不佳。我是在 C++ 中使用类的新手,所以我正在努力学习,但我不明白如何解决这个错误。如果可以,你能解释一下什么是纯虚函数吗?任何帮助将不胜感激。
【问题讨论】:
-
错误明确地向您显示错误:
InputVerifier类是抽象的,因为virtual bool meetsCriteria(char c) = 0;抽象方法。您不能创建此类的实例。 -
InputVerifier是一个抽象类,因为它具有纯虚函数。您不能创建它的对象。您可以将指针InputVerifier*作为成员,并且可以传递任何实现虚函数的子类对象。在这种情况下DigitInputVerifier -
为了清楚起见,我想要实现的是一种超类和子类关系,其中我有一个超类,我可以有很多子类。超类变量将被分配给我想要分配给它的任何子类。此外,当我尝试将变量设为指针时,我得到“未定义对 WinMain@16 的引用”,这显然意味着应用程序正在尝试创建 Windows 应用程序而不是控制台应用程序。
标签: c++ derived-class base-class