HiroLab

プログラミングに関する情報発信サイト。

C++

【C++】Day 10:継承とポリモーフィズム

投稿日:

Day 10では、継承とポリモーフィズムについて学習します。

以下にそれぞれの内容を詳細に説明します。

 

継承:

1. 継承の概念:
– 継承は、既存のクラス(ベースクラスまたは親クラス)を基に新しいクラス(派生クラスまたは子クラス)を作成する機能です。
– 派生クラスは、ベースクラスの属性と振る舞いを継承し、さらに新しい属性と振る舞いを追加することができます。
– 継承により、コードの再利用性と保守性を向上させることができます。

 

2. 構文:

class BaseClass {
// BaseClassの定義
};

class DerivedClass : public BaseClass {
// DerivedClassの定義
};

派生クラスは、`class` キーワードの後にクラス名を記述し、コロン `:` の後にベースクラスを指定して継承します。
継承の際には、アクセス制御指定子(`public`、`private`、`protected`)を指定できます。`public`を指定することで、派生クラスの外部からベースクラスのメンバにアクセスできるようになります。

 

ポリモーフィズム:

1. ポリモーフィズムの概念:
– ポリモーフィズムは、同じインターフェースを持つオブジェクトが異なるクラスであるかのように振る舞うことができる機能です。
– ポリモーフィズムにより、オブジェクトの種類を意識せずに同じ操作を実行することができます。

 

2. 静的なポリモーフィズム:
– 静的なポリモーフィズムは、関数のオーバーロード(同じ名前の関数を引数の型や個数を変えて複数定義すること)やテンプレートを使って実現されます。
– コンパイル時にオブジェクトの型が決定されるため、静的なポリモーフィズムと呼ばれます。

 

3. 動的なポリモーフィズム:
– 動的なポリモーフィズムは、仮想関数を使って実現されます。
– ポインタや参照を使ってオブジェクトを操作する場合に、実行時にオブジェクトの型に応じて適切なメンバ関数が呼ばれるようになります。

 

例題:

#include <iostream>

// BaseClassの定義
class BaseClass {
public:
void display() {
std::cout << "BaseClass" << std::endl;
}
};

// DerivedClassの定義
class DerivedClass : public BaseClass {
public:
void display() {
std::cout << "DerivedClass" << std::endl;
}
};

int main() {
// BaseClassのオブジェクトを作成
BaseClass baseObj;

// DerivedClassのオブジェクトを作成
DerivedClass derivedObj;

// BaseClassのdisplayメソッドを呼び出し
baseObj.display(); // 出力: BaseClass

// DerivedClassのdisplayメソッドを呼び出し
derivedObj.display(); // 出力: DerivedClass

// BaseClassのポインタを使ってDerivedClassのオブジェクトを操作
BaseClass* ptr = &derivedObj;
ptr->display(); // 出力: BaseClass(動的なポリモーフィズムが働いている)

return 0;
}

 

演習問題:

1. 動物(Animal)クラスを定義してください。このクラスには、動物の名前を表すメンバ変数と「鳴く」メソッドが含まれるようにして

ください。その後、Animalクラスを継承した猫(Cat)クラスと犬(Dog)クラスを定義し、それぞれの鳴き声を表示するプログラムを作成してください。動物のオブジェクトを配列として作成し、ポリモーフィズムを使って全ての動物の鳴き声を表示してください。

2. 2次元の図形を表すShapeクラスを定義してください。このクラスには、図形のタイプ(円、四角形、三角形など)を表すメンバ変数と、面積を計算する仮想関数`calculateArea()`を含めてください。その後、Shapeクラスを継承した円(Circle)、四角形(Rectangle)、三角形(Triangle)のクラスを定義し、各図形の面積を計算して表示するプログラムを作成してください。

これらの例題と演習問題を解くことで、継承とポリモーフィズムの使い方を理解し、オブジェクトの振る舞いを柔軟に操作するスキルを向上させることができます。問題を解いたら、プログラムが正しく動作しているかどうかを確認してみてください。

-C++
-, ,

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

【C++】Day 14:C++における文字列操作

Day 14では、C++における文字列操作について学習します。 C++では標準ライブラリである`<string>`を使用して、文字列を操作することができます。 以下に文字列操作の主な内容と …

【C++】Day 9:クラスとオブジェクト

Day 9では、クラスとオブジェクトについて学習します。 以下にそれぞれの内容を詳細に説明し、例題と演習問題を提示します。   クラスとオブジェクトの内容:   1. クラス: & …

【C++】Day 19:マルチスレッドプログラミングにおける同期と通信の重要性

Day 19では、マルチスレッドプログラミングにおける同期と通信の重要性について学習します。 マルチスレッドプログラムでは複数のスレッドが同時に動作するため、スレッド同士が競合状態になる可能性がありま …

【C++】Day 23:ネットワークプログラミングの応用

Day 23では、ネットワークプログラミングの応用について学習します。 ネットワークプログラミングは、クライアントとサーバーの間でデータを送受信するだけでなく、さまざまな応用があります。 以下にネット …

【C++】Day 24:デバッグとテスト

Day 24では、デバッグとテストについて学習します。 プログラムを書く際には、バグを見つけて修正するデバッグや、プログラムが正しく動作することを確認するテストが重要です。 以下にデバッグとテストに関 …