2017-04-07 99 views
0

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

你的问题是什么? –

+1

只需删除所有Java关键字并添加适当的C++语法。一个很好的教程可以创造奇迹。 – DeiDei

+0

@drescherjm已更新 – Humberd

回答

2

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

不要忘记提供一个纯虚拟破坏的实现,否则你的代码中会有未定义的行为。

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

因为NodeStmtNode有一个纯虚函数和行为像一个interface你可以定义自己的ctors的保护。

有没有必要定义destruction s与override关键字。