5章 クラス

http://www.geocities.jp/ky_webid/cpp/language/005.html

クラスの話が出てきました。

ここからがC++の本番といった感じでしょうか。

と、そのまえにC++における構造体の話もありました。

C++は構造体もクラスも殆ど同じとのこと。

さらにstructやenum、unionといったキーワードを定義時に省略できるようになったようです。

これでわざわざtypedefしなくてもよくなりましたね。便利です。

さて話を戻してクラスの話。

まずはとにかく書いてみましょう。

#include <iostream>

class CSample {
public:
    void set(int num);
    int get();
private:
    int m_num;
};

void CSample::set(int num) {
    m_num = num;
}

int CSample::get() {
    return m_num;
}

int main () {
    CSample obj;
    int num;
    
    std::cout << "整数を入力せよ" << std::endl;
    std::cin >> num;
    
    obj.set(num);
    std::cout << obj.get() << std::endl;
    
    return 0;
}
$ main
整数を入力せよ
100
100

なるほど。いろいろと面白いですね。

CSampleのメンバ関数を実際に定義する場合は、CSample::setのようにコロンをつけてどのクラスのメンバであるかを明示してあげないといけないというわけですね。

また、メンバ関数内で使用しているm_numはいきなり登場してますが、これは先に宣言したint m_numが割り当てられているということになるんでしょうか。

そしてこのm_numはCSample objといったように定義したobj変数に対して個別の値として認識されるようですね。つまり別のCSample obj2を定義すればm_numの値はそれぞれ別々の領域になるといった感じでしょうか。

実際そうなるか試してみます。

int main () {
    CSample obj1;
    CSample obj2;
    int num;
    
    std::cout << "整数を入力せよ" << std::endl;
    std::cin >> num;
    
    obj1.set(num);
    obj2.set(num+1);
    std::cout << obj1.get() << std::endl;
    std::cout << obj2.get() << std::endl;
    
    return 0;
}
$ main
整数を入力せよ
100
100
101

うまくいってますね。

これだけみれば確かに関数も定義できるようになった構造体って感じですね。

ただし、publicやprivateといった宣言によって変数へのアクセスのコントロールができるみたいです。

それは次の章で詳しくとのことなので今日はこの辺で。