10_メンバ変数とメンバ関数

はじめに

前章ではクラスの定義と使い方を学びました。この章では、クラスの中に含まれる「メンバ変数」と「メンバ関数」について、その意味や使い方をさらに深く理解します。

メンバ変数とは?

メンバ変数は、クラスの中にあるデータ(変数)です。それぞれのオブジェクトが自分だけの値を持つことができます。

// 10_member_variable.cpp
#include <iostream>
using namespace std;

class Dog {
public:
    string name;
    int age;
};

int main() {
    Dog a, b;  // Dog型のオブジェクト(インスタンス)を2つ作成
    a.name = "Pochi";
    a.age = 3;

    b.name = "Shiro";
    b.age = 5;

    cout << a.name << " は " << a.age << " 歳" << endl;
    cout << b.name << " は " << b.age << " 歳" << endl;

    return 0;
}

Dog はクラス(型)であり、ab はそのオブジェクト(インスタンス)です。

メンバ関数とは?

メンバ関数は、クラスに定義された機能(処理)のことです。そのオブジェクトに関する処理を行うときに使います。

// 10_member_function.cpp
#include <iostream>
using namespace std;

class Dog {
public:
    string name;
    int age;

    void introduce() {
        cout << name << " は " << age << " 歳の犬です。" << endl;
    }
};

int main() {
    Dog d;  // Dog型のオブジェクト(インスタンス)
    d.name = "Pochi";
    d.age = 4;

    d.introduce();

    return 0;
}

d は Dog クラスのオブジェクト(インスタンス)であり、introduce() はそのメンバ関数です。

コーディング演習

演習1:基本コードを動かす

10_01_member.cpp を作成し、次のコードを入力して実行しましょう。
// member_function.cpp
#include <iostream>
using namespace std;

class Dog {
public:
    string name;
    int age;

    void introduce() {
        cout << name << " は " << age << " 歳の犬です。" << endl;
    }
};

int main() {
    Dog d;
    d.name = "Pochi";
    d.age = 4;
    d.introduce();
    return 0;
}

演習2:コードを改造する

10_01_member.cpp をコピーして 10_02_member_mod.cpp として保存し、次の変更を加えてみましょう:
ヒントを見る void bark() { cout << name << ": ワン!" << endl; } のように書けます。
bool 型のメンバ関数は return age >= 3; で条件の結果を返せます。
main関数で if (d.isAdult()) { cout << "成犬です" << endl; } のように使います。

理解度チェック

問題10-1

次のコードを実行すると何が表示されますか?

class Pet {
public:
    string name;
    void greet() {
        cout << name << " です。よろしく!" << endl;
    }
};

int main() {
    Pet p;
    p.name = "Tama";
    p.greet();
    return 0;
}
解説を表示 正解:ア
p.name = "Tama" で name に "Tama" が代入され、greet() 内で name を表示するので「Tama です。よろしく!」が出力されます。

問題10-2

Dog クラスを2つのインスタンス ab で作成した場合、それぞれのメンバ変数の関係として正しいものはどれですか?

解説を表示 正解:イ
各オブジェクト(インスタンス)はそれぞれ独立したメンバ変数のコピーを持ちます。a.name を変えても b.name は変わりません。

問題10-3

次のコードを実行すると何が表示されますか?

class Point {
public:
    int x, y;
    void show() {
        cout << "(" << x << ", " << y << ")" << endl;
    }
};

int main() {
    Point p;
    p.x = 3;
    p.y = 5;
    p.show();
    return 0;
}
解説を表示 正解:ウ
show() の中で "(" << x << ", " << y << ")" と出力しているので、「(3, 5)」が表示されます。

問題10-4

メンバ関数 isPassed()return score >= 60; と定義されているとき、score = 55 のとき何が返されますか?

解説を表示 正解:イ
55 >= 60 は偽なので false(値としては 0)が返されます。60以上でないと true にはなりません。

まとめ