2016-04-26 9 views
-7

誰かがここで何が起こっているのか説明できますか?このコンストラクタについては何ですか? RetTypeとは何ですか?仮想はどういう意味ですか?私はとても混乱しています。あなたとオンラインでチャットをすることが可能であれば、私はもっと幸せになるでしょう。このコンストラクタは何を理解しているのですか

class Traversal { 
public: 
    virtual ~Traversal(){}; 
public: 
    typedef enum { 
     Stop, Continue, Skip, 
     LastRetType 
    } 
    RetType; 
    virtual RetType pre(PDTAdd & d) { 
     return Continue; 
    } 


}; 
+3

私は初心者のためにC++の本を入手するだけで、自分で答えを見つけることができると思います。 –

+2

アドバイスに従って、良い本やオンラインチュートリアルを見つけて、体系的にそれに従ってください。例えば、http://www.cplusplus.com/doc/tutorial/やhttp://www.penguinprogrammer.co.uk/c-beginners-tutorial/classes/ – Bjoern

答えて

2

まず...

typedef enum { 
     Stop, Continue, Skip, 
     LastRetType 
    } 
    RetType; 

は...

enum RetType { 
     Stop, Continue, Skip, 
     LastRetType 
    }; 

...言うのが悪い道..ですこれは、リストされた値(Stopがデフォルトで0,Continue1など)をとることができるenumタイプを作成するだけです。

pre機能...

virtual RetType pre(PDTAdd & d) { 
     return Continue; 
    } 

は...その後、これらの値のいずれかを返します - それはContinueをハードコードの上に。

それは、派生クラスは、関数の独自のオーバーライドを書くことができ、誰かが実際に、このような派生クラスのインスタンスを参照Traversal* pTraversal& rを持っている場合、それはほとんどの由来となりますことを意味する、しかしvirtualです関数がp->pre(d)またはr.pre(d)によって実行されるオーバーライド(存在する場合)を提供するクラス。これは仮想ディスパッチとして知られており、C++がオブジェクト指向プログラミングの基本機能の1つであるランタイムポリモーフィズムをサポートする方法です。

あなたの次の動きは良い本またはチュートリアルでなければなりません。

+0

ありがとう!しかし、Jerryはあなたよりも速かったです。( –

+0

@KMass: 'Traversal :: Continue'は' Continue'と同じことですが、それが見つかる範囲を明示しています。 'pre'の中でそれを使用しますが、' Traversal'の外にあるいくつかのコード( 'Traversal'のメンバ関数ではない)が' Traversal :: Continue'を使うかもしれないので、コンパイラはそれを見つける場所を知っています。識別子(Continue)(例えば、関数名、変数、引数、型など)の他の使用は競合しない。 –

3

サンプルにはコンストラクタがありません。存在します:

  • デストラクタは何もしません。

  • と呼ばれるタイプの定義。そのため、あらゆるタイプの列挙型定義を繰り返す必要はなく、そのタイプの変数を定義できます。

  • RefTypeタイプの値を返す関数。

あなたがタイプとして列挙型を定義することができればどこでも、コードはこれと同じようになります:

class Traversal { 
public: 
    virtual ~Traversal(){}; 
public: 
    virtual enum { Stop, Continue, Skip, LastRetType } pre(PDTAdd & d) { 
     return Continue; 
    } 
}; 

は、関数の戻り値の型は、巨大な列挙型であるかを参照してください?サンプルでは、​​そのタイプにはRefTypeという名前が与えられているため、変数を宣言するすべての場所で列挙型定義を繰り返す必要はありません。列挙型をどこでも定義することは悪いことですので、C++では許されません。そのためtypedefが存在します。

あなたが直接return声明の中で、新しいタイプ(structclassまたはenum)を作成することはできませんので、基本的に、列挙型をRefTypeとして事前に定義され、その後、RefTypeは、戻り値の型として使用されています。

RetTypeは、typedefステートメントの一部です。複数の行にまたがるだけです。単一のラインとして、それは次のようになります。

typedef enum { Stop, Continue, Skip, LastRetType } RetType; 
+0

のように、たくさんのことがあります。 LastRetTypeはどうですか? –

+0

@KMass LastRefTypeは列挙型の値の1つであり、継続と停止とスキップ –

+0

@DmitriBudnikovはいでした。私はそれをとてもうまく説明しなかった。編集を見て、それがまだひどく説明されていると思ったら教えてください。 –

関連する問題