2014年1月23日木曜日

C++ オブジェクトの配列を初期化




今回はオブジェクトの配列を初期化する方法
についての紹介になります(^^)

通常の変数と同様に、もちろんオブジェクトも
配列にすることができます。






初期化する場合は以下のようになります。

//まずはDateクラスの定義
class Date
{
public:
    Date(int year, int month, int day)
    {
        m_year = year;
        m_month = month;
        m_day = day;
    }
private:
    int m_year;
    int m_month;
    int m_day;
};

int main(void)
{
    //そしてDateクラスの2つのオブジェクトを宣言と同時に初期化
    Date UseByDate[2] = { Date(2014, 1, 13), Date(2014, 2, 14) };
        :

この場合は、Dateクラスの2つのオブジェクトが引数を3つ取る
コンストラクタで初期化されます(^-^)

初期化のバリエーションについて
オブジェクトの配列の初期化では、要素の途中まで
初期化するということもできます。

Date UseByDate[31] = { Date(2014, 1, 13), Date(2014, 2, 14) };

この場合、要素は31個ありますが、最初の2つだけが引数を3つ取る
コンストラクタが呼び出されます。
そして、残りの29個については、引数のないコンストラクタが呼び出されます。

また、コンストラクタの引数が一つだけの時は、引数の内容だけを
記述することもできます。

   :
    Date(const char *datestr)
    {
        cout << datestr << endl;
    }
        :
int main(void)
{
    //もちろん従来のように書いても構いませんし
    Date UseByDate1[2] = { Date("2014/03/15"), Date("2014/04/16") };  
    //引数の内容だけを記述してみたってのもありです
    Date UseByDate2[2] = { "2014/03/15", "2014/04/16" };
        :

いずれにしても、同じ内容で初期化されているというのが
分かるかと思います(^^) 

今日の名言
一つ一つの問題の本質を正しくつかめ。仕事を分割して
適当に時間割りせよ。
                           ベンジャミン・フランクリン

人生の全体ばかりに気を取られて思い悩んではいけない。まだ自分の手元に
来るかどうかわからない重荷の数と性質を、一目で読み取りとろうとするな。
むしろ問題が起こるたびに、「この仕事の手に負えない個所はどこだろか」と
自問するのだ。この問いに正直に答えれば、自分でも赤面したくなるだろう!
次に思い出すべきことは、過去も未来も自分を押し潰すことはできない、自分を
押しつぶせるのは現在だけだ、ということである。その現在ですら、もし適当に
分割してそれぞれの大きさの範囲を決めたうえで、自分に問い直せば、
取るになりぬものとなる。
                           マルクス・アウレリウス