この章では、C++でオブジェクト指向プログラミングの基本となる「クラス」について学びます。
クラスは「設計図」です。
C++で最もシンプルなクラスの例として、次のような形からスタートできます。 まずは読めるようになることを目指してください。
#include <iostream>
using namespace std;
// クラスの定義
class Greeting {
public:
void sayHello() {
cout << "Hello, World!" << endl;
}
};
int main() {
Greeting g; // クラスからオブジェクトを作成
g.sayHello(); // メンバ関数を呼び出し
return 0;
}class Greeting { ... }; で Greeting
という型(設計図) を作成sayHello() は Greeting型の
機能(メンバ関数)Greeting g; で Greeting型の
オブジェクト(実体) を作成g.sayHello(); でオブジェクトの機能を実行このように、クラスは型を作り、オブジェクトはその型の実体 という関係になります。
#include <iostream>
using namespace std;
// クラスの定義
class Student {
public:
string name;
int score;
void show() {
cout << name << " の点数は " << score << " 点です。" << endl;
}
};
int main() {
// クラスからオブジェクトを作成
Student s;
s.name = "Tanaka";
s.score = 80;
s.show(); // メンバ関数を呼び出し
return 0;
}class クラス名 { ... }; でクラスを定義public: で公開メンバ(外からアクセス可能)を宣言string name と int score は
メンバ変数(データ)void show() は メンバ関数(処理)Student s; で オブジェクト(実体)
を作成s.name, s.score, s.show()
でオブジェクトの機能を使うpublic:
で公開メンバ(外からアクセス可能)を宣言と説明しましたが、これはアクセス修飾子と呼ばれ、どこからアクセス可能か
を指定するものです。
C++のクラスでは、メンバのアクセス範囲を指定できます。
| 修飾子 | アクセスできる範囲 | 用途 |
|---|---|---|
public |
どこからでも可 | 外部から使わせたい関数や変数 |
private |
クラス内部からのみ可 | 外部に見せたくないデータや内部処理 |
protected |
クラスとその派生クラスから可 | 継承先には公開したいが、外部からは隠したい場合 |
class Account {
private:
int balance;
public:
Account() {
balance = 0;
}
void deposit(int amount) {
balance += amount;
}
void show() {
cout << "残高: " << balance << "円" << endl;
}
};このように、データを隠して操作だけを公開するのが基本的なクラス設計です。
次のコードを実行すると何が表示されますか?
#include <iostream>
using namespace std;
class Book {
public:
string title;
void print() {
cout << "タイトル: " << title << endl;
}
};
int main() {
Book b;
b.title = "C++入門";
b.print();
return 0;
}タイトル: C++入門
「商品」を表す Product クラスを作成し、
// 09_class_practice.cpp
#include <iostream>
using namespace std;
class Product {
public:
string name;
int price;
void display() {
cout << name << " は " << price << " 円です。" << endl;
}
};
int main() {
Product p;
p.name = "りんご";
p.price = 150;
p.display();
return 0;
}↓は枝情報です
オブジェクト指向の話をしていると、「メソッド」という言葉を耳にすることがあります。 ところが、C++ではあまり「メソッド」という言葉は使われません。 代わりに「メンバ関数(member function)」と呼ぶのが一般的です。
実は機能的な違いはありません。 どちらも「クラスの中で定義され、オブジェクトから呼び出される関数」のことです。
言語の設計思想と歴史の違いによります。
| 用語 | 主な使用言語 | 背景 |
|---|---|---|
| メンバ関数 | C++, C++系教材 | C言語の流れをくんだ関数中心の設計 |
| メソッド | Java, Python, C# | 純粋なオブジェクト指向を前提とした設計 |
C++は C 言語の拡張として生まれたため、「関数」という言葉をそのまま使い、「クラスの中にある関数=メンバ関数」と呼ぶようになりました。
いいえ、呼んでも間違いではない ただし、C++の文脈では「メンバ関数」という言葉が定着しているため、ドキュメントや講義ではそれに合わせて使った方が自然です。
メソッドもメンバ関数も意味は同じ。 ただし、C++では「メンバ関数」と呼ぶのが一般的。 なぜなら、C++は「関数」中心のC言語から進化したからです。
public で外からアクセス可能にする