我正在从Java中传输,我正在努力学习如何用C++编写一个好的代码。
根据来自抽象类的多级继承,我有一个问题
我在Java中有这个伪代码,我想使用C++中的类接口和所有构造函数和析构函数来定义类似的结构。
abstract class Node {
public abstract void addChild(Node child);
}
abstract class StmtNode extends Node {
}
class WhileNode extends StmtNode {
}我的问题是:你能帮我定义这样的类吗?
@编辑当前我有以下类:
class Node {
public:
explicit Node();
virtual ~Node() = 0;
virtual void addChild(Node* child) = 0;
};
class StmtNode : public Node {
public:
explicit StmtNode();
virtual ~StmtNode() = 0;
virtual void addChild(Node* child) override;
};
class WhileNode : StmtNode {
public:
explicit WhileNode();
~WhileNode() override;
void addChild(Node* child) override;
};他们是对的吗?
发布于 2017-04-07 19:45:05
不需要将参数较少的ctor定义为explicit。因此,可以通过删除explicit Node();关键字来简化explicit;
不要忘记为纯虚拟销毁提供一个实现,否则您的代码中将有未定义的行为。
inline Node::~Node() { }
inline StmtNode::~StmtNode() { }因为Node和StmtNode有一个纯虚拟函数,并且行为像一个interface,所以您可以将它们的ctors定义为受保护的。
没有必要用destruction关键字定义override。
https://stackoverflow.com/questions/43285684
复制相似问题