導入
クラスは、データ(メンバ変数)だけでなく、それを扱う関数(メンバ関数)もまとめられます。これによって「データ+そのデータの操作」を1つの部品にできます。
説明
クラスの中に書いた関数がメンバ関数です。同じクラスのメンバ変数に、obj. を書かずに直接アクセスできます。
flowchart TB
subgraph R["class Rectangle"]
d["メンバ変数:width, height"]
m["メンバ関数:area(), scale()"]
end
m -->|"自分の width/height を使う"| d
#include <iostream>
using namespace std;
class Rectangle {
public:
int width;
int height;
int area() { // 面積を計算するメンバ関数
return width * height; // 自分の width/height を使える
}
void scale(int k) { // 縦横を k 倍する
width *= k;
height *= k;
}
};
int main() {
Rectangle r;
r.width = 3;
r.height = 4;
cout << r.area() << endl; // 12
r.scale(2);
cout << r.area() << endl; // 48(6 × 8)
return 0;
}
メンバ関数は「宣言だけクラス内に書き、定義は外に書く」こともできます。大きなクラスではこの分け方が普通です。クラス名::関数名 と書きます。
#include <iostream>
using namespace std;
class Rectangle {
public:
int width, height;
int area(); // 宣言だけ
};
int Rectangle::area() { // クラスの外で定義(:: でどのクラスか示す)
return width * height;
}
int main() {
Rectangle r{3, 4};
cout << r.area() << endl; // 12
return 0;
}
まとめ
メンバ関数を使うと「データとその操作」を1つの型にまとめられます。定義をクラス外に出すときは 戻り値 クラス名::関数名(...) と書きます。次は「作るときの初期化」を担うコンストラクタです。