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 30:C++の応用と展望

Day 30では、「C++の応用と展望」について学習します。 C++は非常にパワフルで柔軟なプログラミング言語であり、さまざまな応用分野で使用されています。この日は、C++の応用領域や将来の展望につい …

【C++】Day 26:デザインパターン「作成型パターン」

Day 26では、デザインパターンのうち「作成型パターン」について学習します。 作成型パターンは、オブジェクトのインスタンスを生成する方法に関するパターンです。主な作成型パターンには、シングルトン、フ …

【C++】30日間で体系的に学習するのに効果的なカリキュラム

C++を30日間で体系的に学習するための効果的なカリキュラムを以下に示します。 このカリキュラムは、基本的な概念から徐々に複雑なトピックに進み、実践的なプロジェクトを通じて学習を強化するアプローチを取 …

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

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

【C++】Day 6:関数について

Day 6では、関数について学習します。 関数は、プログラム内で特定のタスクを実行するために使用されるブロック(サブルーチン)です。関数はメインプログラムから呼び出すことができ、再利用性とコードの構造 …