我正在从Java转移,我正在努力学习如何用C ++编写一个好的代码。
根据抽象类
的多级继承,我有一个问题我在Java中有这个伪代码,我想在C ++中使用所有构造函数和析构函数的类接口来定义类似的结构。
abstract class Node {
public abstract void addChild(Node child);
}
abstract class StmtNode extends Node {
}
class WhileNode extends StmtNode {
}
我的问题是:你能帮我定义这样的课吗?
@edit 目前我有以下课程:
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;
};
它们是否正确?
答案 0 :(得分:2)
无需将参数less ctor定义为explicit
。
因此,可以通过删除explicit Node();
关键字
explicit
不要忘记为纯虚拟破坏提供实现,否则您的代码中将出现未定义的行为。
inline Node::~Node() { }
inline StmtNode::~StmtNode() { }
由于Node
和StmtNode
具有纯虚函数并且行为类似于interface
,因此您可以将其ctors
定义为受保护。
无需使用destruction
关键字定义override
。