|
継承とは?
継承というクラスの使い方
クラスを使う方法は、大きく分けると、下記 2 通りある
- クラスをデータ型とした変数を宣言し、オブジェクトをメモリ上に作成してメンバの機能を利用する
- 既存クラスを継承して新しいクラスを定義すること
- 構文
- 例えば、Car クラスを継承して OpenCar というクラスを定義する場合は下記のようにする
1
2
3
4
|
-
|
!
| class OpenCar : public Car
{
};
|
- 構文解説
- 定義するクラス名の後に、コロンをつける
- public は、継承のスタイルを指定するアクセス指定子
- Car クラスの中で定義されているメンバが、OpenCar クラスのメンバとして引き継がれる
- サンプル
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
-
|
|
|
|
!
-
|
!
-
|
!
-
|
|
|
|
|
!
| #include <stdio.h>
class Car
{
public:
int num;
double gas;
void showCar (void);
};
void
Car::showCar (viod)
{
printf ("num = %d, gas = %f\n", num, gas);
}
class OpenCar : public Car
{
};
void
main (void)
{
OpenCar toyota;
toyota.num = 1234;
toyota.gas = 25.0;
toyota.showCar ();
}
|
- 実行結果
num = 1234, gas = 25.000000
- 用語
- 継承元となるクラスのことを基本クラス (又は、ベースクラス、スーパークラス、親クラス) と呼ぶ
- 継承先となるクラスのことを派生クラス (又は、サブクラス、子クラス) と呼ぶ
派生クラスの定義でメンバを追加した場合は、派生クラスの持つメンバは
基本クラスのメンバと追加されたメンバとを合わせ持ったものとなる
protected の機能
- ココで、メンバに指定するアクセス指定子には、public, private, protected の 3 種類があると紹介した
- クラスを継承して使う場合、基本クラスの public 又は protected が指定されたメンバである
- 具体例
- 下記サンプルの場合、Car クラスを使い、誤って showCar () を呼び出すことを防げる
- Car クラスを継承して使う SuperCar クラスは、showCar () を呼び出すことができる
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
-
|
|
|
|
|
!
-
|
!
-
|
|
|
!
-
|
|
!
-
|
|
|
|
|
|
!
| #include <stdio.h>
class Car
{
public:
int num;
double gas;
protected:
void showCar (void);
};
void
Car::showCar (void)
{
printf ("num = %d, gas = %f\n", num, gas);
}
class SuperCar : public Car
{
public:
int maxSpeed;
void showAllData (void);
};
void
SuperCar::showAllData (void)
{
showCar ();
printf ("maxSpeed = %d\n", maxSpeed);
}
void
main (void)
{
SuperCar ca;
ca.num = 1234;
ca.gas = 25.00;
ca.maxSpeed = 250;
ca.showAllData ();
}
|
- 実行結果
num = 1234, gas = 25.000000
maxSpeed = 250
- まとめ
- どのような使われ方をしても公開して問題ないメンバは public
- クラスの中だけで使用するメンバは private
- 継承して使う人にだけ意味のあるメンバには protected
継承におけるアクセス指定子の役割
- メンバ関数と同様に、継承でも 3 種のアクセス指定子を指定することができる
- public, private, protected の 3 種
- アクセス指定子を省略すると、private が指定されたものとみなされる
- 継承での各アクセス指定子によるメンバの引き継がれ方は以下を参照
参考
|
|