12

リストを初期化する方法を学ぼうとしています。

以下に簡単なクラスがあり、変数のリストを初期化しようとしています。最初のMonth(int m): month(m)作品。その行の下で、複数の変数を使用して同様のことを実行しようとしています。これはその形式で可能ですか?ワンライナーから離れる必要がありますか?

class Month
{
public:
    Month(int m) : month(m) {} //this works
    Month(char first, char second, char third) : first(first){} : second(second){} : third(third){} //DOES NOT WORK
    Month();
    void outputMonthNumber(); //void function that takes no parameters
    void outputMonthLetters(); //void function that takes no parameters
private:
    int month;
    char first;
    char second;
    char third;
};

明らかに、私はこれを行う方法について多くの手がかりを持っていません、どんなガイダンスもいただければ幸いです、ありがとう

4

4 に答える 4

16

これを試して:

  Month(char first, char second, char third) 
     : first(first), second(second), third(third) {} 

[これは1行で実行できます。単にプレゼンテーションのために分割しました。]

空の中括弧{}はコンストラクターの単一の本体であり、この場合は空です。

于 2011-09-29T22:17:20.030 に答える
5
Month(char first, char second, char third) 
      : first(first)
      , second(second)
      , third(third)
{} //DOES WORK :)
于 2011-09-29T22:18:22.650 に答える
3

他の人が指摘しているように、これは単にカンマで区切られた項目のリストです。variable(value)構文は、基本データ型を作成するためのデフォルトの方法にすぎません。たとえば、初期化リストの外部でこのメソッドを使用できます。さらに、クラスのメンバーがコンストラクターを持つクラスでもある場合は、まったく同じ方法で呼び出すことになります。

将来の参照のために、クラスの宣言にリストを配置する必要があるだけではありません。このコードは、たとえば完全に問題ありません

class Calender{
    public:
         Calender(int month, int day, int year);
    private:
         int currentYear;
         Time time;
};

Calender::Calender(int month, int day, int year) : currentYear(year), time(month, day) {
    // do constructor stuff, or leave empty
};
于 2011-09-29T22:36:17.523 に答える
1

イニシャライザーはコンマで区切られ、コンストラクターの本体は1つだけにする必要があります。

于 2011-09-29T22:17:24.037 に答える