|
オブジェクト指向の三本柱
- オブジェクト指向とは、継承とカプセル化と多態性を使うことだという一説がある
- 継承、カプセル化、多態性は、オブジェクト指向プログラミングの三本柱と言われている
- 継承(inheritance)
- 他のクラスのメンバを引き継ぎ、新しいクラスを定義すること
- カプセル化(encapsulation)
- クラスのメンバを部分的に隠すこと
- 多態性(polymorphism)
- 同じメッセージに対して、複数の異なる応答をすること
(多様性や多義性と呼ぶ場合もある)
オーバーロードによる多態性
- 1つのクラスの中に、同じ名前のメンバ関数を複数定義することである
- オーバーロード (over load)とは、「多重定義」という日本語に訳せる
- サンプル
-
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
|
-
|
|
|
!
-
|
!
-
|
!
-
|
|
|
|
|
|
!
| class MyClass
{
public:
int nibai (int a);
double nibai (double a);
};
int
MyClass::nibai (int a)
{
return a * 2;
}
double
MyClass::nibai (double a)
{
return a * 2;
}
void
main (void)
{
MyClass obj;
int a;
double b;
a = obj.nibai (1234);
b = obj.nibai (3.14);
}
|
- ポイント
- C言語では、コンパイルエラーとなる
- C++ コンパイラは、関数を名前と引数で識別する (戻り値を関数の識別に使用しない)
- MyClass を使う側では、
「引数の値を2倍するには、nibai() というメンバ関数を呼び出せば良い」ということになる
- オーバーロードによって、同じメッセージ(nibai) に対して、
複数の異なる応答をする多態性が実現できる
オーバーロード第2の活用法
- 前節で、引数の型が異なる活用法を紹介した
- もう1つの活用法は、引数の数が異なる同じ名前のメンバ関数を定義することです
- サンプル
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
|
-
|
|
|
|
!
-
|
!
-
|
!
-
|
|
|
!
-
|
|
|
|
|
!
| #include <stdio.h>
class MyClass
{
public:
void showMessage (void);
void showMessage (char *s);
void showMessage (char *s, int n);
};
void
MyClass::showMessage (void)
{
printf ("Hello world.\n");
}
void
MyClass::showMessage (char *s)
{
printf ("%s\n", s);
}
void
MyClass::showMessage (char *s, int n)
{
int i;
for (i = 0; i < n; i++)
printf ("%s\n", s);
}
void
main (void)
{
MyClass obj;
obj.showMessage ();
obj.showMessage ("Hard development.");
obj.showMessage ("HELLO WORLD", 3);
}
|
- ポイント
- 異なる数の引数を持つメンバ関数をオーバーロードする場合は、
1つのメンバ関数が他のメンバ関数を呼び出すようにすると効率的
- 上記サンプルの改善
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
-
|
!
-
|
!
-
|
|
|
!
| void
MyClass::showMessage (void)
{
showMessage ("Hello world.", 1);
}
void
MyClass::showMessage (char *s)
{
showMessage (s, 1);
}
void
MyClass::showMessage (char *s, int n)
{
int i;
for (i = 0; i < n; i++)
printf ("%s\n", s);
}
|
参考
|
|