前章ではクラスの定義と使い方を学びました。この章では、クラスの中に含まれる「メンバ変数」と「メンバ関数」について、その意味や使い方をさらに深く理解します。
メンバ変数は、クラスの中にあるデータ(変数)です。それぞれのオブジェクトが自分だけの値を持つことができます。
// 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 はクラス(型)であり、a や b はそのオブジェクト(インスタンス)です。
メンバ関数は、クラスに定義された機能(処理)のことです。そのオブジェクトに関する処理を行うときに使います。
// 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() はそのメンバ関数です。
// 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;
}
Dog クラスに void bark() メンバ関数を追加し、「Pochi: ワン!」と表示するbool isAdult() メンバ関数を追加し、age が 3以上なら true を返すbark() と isAdult() を呼び出して結果を表示するvoid bark() { cout << name << ": ワン!" << endl; } のように書けます。bool 型のメンバ関数は return age >= 3; で条件の結果を返せます。if (d.isAdult()) { cout << "成犬です" << endl; } のように使います。
次のコードを実行すると何が表示されますか?
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 です。よろしく!」が出力されます。
Dog クラスを2つのインスタンス a、b で作成した場合、それぞれのメンバ変数の関係として正しいものはどれですか?
a.name を変えても b.name は変わりません。
次のコードを実行すると何が表示されますか?
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)」が表示されます。
メンバ関数 isPassed() が return score >= 60; と定義されているとき、score = 55 のとき何が返されますか?
55 >= 60 は偽なので false(値としては 0)が返されます。60以上でないと true にはなりません。