首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多级继承

多级继承
EN

Stack Overflow用户
提问于 2017-04-07 19:22:45
回答 1查看 107关注 0票数 0

我正在从Java中传输,我正在努力学习如何用C++编写一个好的代码。

根据来自抽象类的多级继承,我有一个问题

我在Java中有这个伪代码,我想使用C++中的类接口和所有构造函数和析构函数来定义类似的结构。

代码语言:javascript
复制
abstract class Node {
    public abstract void addChild(Node child);
}

abstract class StmtNode extends Node {

}

class WhileNode extends StmtNode {

}

我的问题是:你能帮我定义这样的类吗?

@编辑当前我有以下类:

代码语言:javascript
复制
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;
};

他们是对的吗?

EN

回答 1

Stack Overflow用户

发布于 2017-04-07 19:45:05

不需要将参数较少的ctor定义为explicit。因此,可以通过删除explicit Node();关键字来简化explicit

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

代码语言:javascript
复制
inline Node::~Node() { }
inline StmtNode::~StmtNode() { }

因为NodeStmtNode有一个纯虚拟函数,并且行为像一个interface,所以您可以将它们的ctors定义为受保护的。

没有必要用destruction关键字定义override

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43285684

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档