多级继承

Multi level inheritance

本文关键字:继承 多级      更新时间:2023-10-16

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

他们正确吗?

没有必要将参数 less ctor 定义为 explicit 。因此,可以通过删除explicit Node();关键字来简化explicit;

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

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

由于NodeStmtNode具有纯虚函数并像interface一样起作用,因此您可以将它们的ctors定义为受保护。

无需使用override关键字定义destruction