0

私がいくつかのクラスを持っていて、そのクラス内に私が書いたカスタムメイドの Queue オブジェクトがあり、私のクラス定義は次のようになります:

class Parser
{
    public:
        Parser();
    private:
        Queue<char> Q;
};

またclass Queue、デフォルトのコンストラクターと、単一の int パラメーターを使用してその容量を指定するコンストラクターがあります。Q フィールドをインスタンス化するときに、パラメーターを受け取るコンストラクターを起動する必要があることを Parser クラスに伝えるにはどうすればよいですか (したがって、 (容量がかなり小さい)デフォルトのコンストラクターを起動するのではなく、より大きな容量)?私はこれを調べましたが、継承と親クラスのコンストラクターを中心に展開しない答えを見つけるのに苦労しています。ありがとう!

また、置き換えてみましQueue<char> QQueue<char> Q(100)が、コンパイラーはこれについて不平を言います。

4

3 に答える 3

2

Parser のコンストラクター実装では、初期化リストを使用します...

Parser::Parser()
:Q(10) ///example of initializing to capacity 10
{
}
于 2013-02-18T19:14:10.740 に答える
1

これは、コンストラクターを選択する member-initialization-list にあります。

  • デフォルトのコンストラクターを呼び出したい場合は、次のようにします。

    Parser() : Q() {} //calls the default constructor
    

    引数を渡さないため、上記は次と同じです。

     Parser() {} //Q is also constructed invoking the default constructor
    

    Parserコンストラクターの本体に入る前に、既定のコンストラクターを呼び出すことによって完全に構築されQます

  • 他のコンストラクターを呼び出したい場合は、次のようにします。

    Parser() : Q(10) {} //calls the other constructor
    

    これはあなたが望むものです。そのような場合、通常、Parserこれを行うサイズを渡します。

    Parser(int size) : Q(size) {} //calls the other constructor
    

C++11 では、次のように宣言自体でこれを行うことができます。

class Parser
{
     //...
     Queue<char> Q(10); //C++11 only
};
于 2013-02-18T19:14:06.107 に答える
1

そのようです:

Parser() : Q(100) { }
于 2013-02-18T19:14:05.903 に答える