2017-04-07 13 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

パラメータless ctorをexplicitと定義する必要はありません。 explicit Node();explicitキーワードを削除すると簡略化できます。

純粋な仮想破壊の実装を提供することを忘れないでください。そうしないと、コードに未定義の動作が発生します。

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

NodeStmtNodeは、純粋仮想関数を持っているし、保護されたとして、あなたが彼らのctorsを定義することができますinterfaceのように振る舞うので。

destructionoverrideというキーワードで定義する必要はありません。