はじめに
オブジェクト指向プログラミングの三本柱の一つである「継承 (Inheritance)」は、既にあるクラスの機能(メンバ変数やメンバ関数)を受け継いで、新しいクラスを定義するための強力な仕組みです。
例えば、「乗り物」という基本的なクラスがあれば、それを継承して「車」クラスや「飛行機」クラスを作ることができます。「車」も「飛行機」も「前に進む」という「乗り物」の基本機能は共通して持っていますが、それぞれが独自の機能(例: 「車」はバックする、「飛行機」は飛行する)を追加できます。
これにより、コードの重複を避け、プログラムの再利用性と拡張性を劇的に高めることができます。この記事では、C++におけるクラス継承の基本的な使い方を解説します。
クラスの継承のサンプルコード
このコードは、基本的な情報を扱う Person
(人物)クラスを定義し、そのクラスを継承して、より専門的な情報を持つ Manager
(管理者)クラスを作成します。
完成コード
#include <iostream>
#include <string>
using namespace std;
// --- 1. 親クラス(基底クラス)の定義 ---
class Person {
public:
string name;
int age;
void introduce() {
cout << "名前: " << name << endl;
cout << "年齢: " << age << "歳" << endl;
}
};
// --- 2. 子クラス(派生クラス)の定義 ---
// Personクラスのpublicなメンバを継承
class Manager : public Person {
public:
// Managerクラス独自のメンバ
string department;
};
int main() {
// --- 3. 子クラスのオブジェクトを作成して使用 ---
Manager managerA;
// 親クラス(Person)から継承したメンバを設定
managerA.name = "鈴木 太郎";
managerA.age = 45;
// 子クラス(Manager)独自のメンバを設定
managerA.department = "開発部";
// 親クラスから継承したメンバ関数を呼び出す
managerA.introduce();
// 子クラス独自のメンバにアクセス
cout << "役職: 部長 (" << managerA.department << ")" << endl;
return 0;
}
実行結果
名前: 鈴木 太郎
年齢: 45歳
役職: 部長 (開発部)
コードの解説
1. 親クラスと子クラス
- 親クラス (
Person
): 継承の元となるクラスです。「基底クラス」や「スーパークラス」とも呼ばれます。 - 子クラス (
Manager
): 親クラスの機能を引き継いで作られる新しいクラスです。「派生クラス」や「サブクラス」とも呼ばれます。
2. class Manager : public Person
これが、継承を行うための構文です。
class Manager
: 新しく定義する子クラスの名前です。:
: コロンに続けて、継承する親クラスを指定します。public Person
:Person
クラスをpublic継承するという意味です。public
継承を行うと、親クラスのpublic
なメンバは、子クラスでもpublic
なメンバとして引き継がれます。これにより、main
関数の中からmanagerA.name
のようにアクセスできます。
3. 継承されたメンバの利用
Manager
クラスの定義の中には、name
やage
、introduce()
といったメンバは一切記述されていません。しかし、Person
クラスを継承しているため、Manager
クラスのオブジェクト(managerA
)は、あたかも自分自身のメンバであるかのように、これらのメンバ変数やメンバ関数を自由に使うことができます。
まとめ
今回は、C++におけるクラスの「継承」の基本を解説しました。
- 継承は、既存のクラスの機能を再利用して、新しいクラスを作る仕組み。
class 子クラス名 : public 親クラス名
という構文で定義する。- 子クラスは、親クラスの
public
なメンバを、自分のものとして利用できる。
継承は、オブジェクト指向におけるコードの再利用性を高めるための中心的な機能です。共通の機能を親クラスにまとめ、個別の機能を子クラスに持たせることで、効率的で拡張しやすいプログラムを設計できます。