多级继承

时间:2017-04-07 19:22:45

标签: c++

我正在从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;
};

它们是否正确?

1 个答案:

答案 0 :(得分:2)

无需将参数less ctor定义为explicit。 因此,可以通过删除explicit Node();关键字

来简化explicit

不要忘记为纯虚拟破坏提供实现,否则您的代码中将出现未定义的行为。

inline Node::~Node() { }
inline StmtNode::~StmtNode() { }

由于NodeStmtNode具有纯虚函数并且行为类似于interface,因此您可以将其ctors定义为受保护。

无需使用destruction关键字定义override