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 19:マルチスレッドプログラミングにおける同期と通信の重要性

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

【C++】Day 29:「セキュリティと暗号化」

Day 29では、「セキュリティと暗号化」について学習します。 セキュリティと暗号化は、情報を保護するための重要な概念です。データの機密性、完全性、可用性を確保するために、データの暗号化、ハッシュ化、 …

【C++】Day 5:制御文の一つであるループについて

Day 5では、制御文の一つであるループについて学習します。 ループは、特定の処理を繰り返し実行するための構文です。C++には主に3種類のループがあります:forループ、whileループ、do-whi …

【C++】Day 12:C++の標準ライブラリの使用

Day 12では、C++の標準ライブラリの使用について学習します。 C++の標準ライブラリは、様々な便利な関数やコンテナ、アルゴリズムなどを提供しており、プログラムの記述を簡単にしたり、高度な機能を利 …

【C++】Day 15:C++のテンプレート

Day 15では、C++のテンプレートについて学習します。 テンプレートは、汎用的なプログラムを作成するための強力な機能で、関数やクラスを汎用的に定義することができます。 以下にテンプレートの主な内容 …