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 2:変数とデータ型について

Day 2では、変数とデータ型について学習します。 変数はデータを格納するためのメモリ上の領域であり、データ型はその変数が保持できるデータの種類を指定します。 C++にはいくつかの基本的なデータ型があ …

【C++】Day 16:C++のラムダ式とSTLアルゴリズム

Day 16では、C++のラムダ式とSTLアルゴリズムについて学習します。 ラムダ式は、簡単な関数をインラインで定義する方法であり、STLアルゴリズムは標準ライブラリのアルゴリズム関数です。 以下にそ …

【C++】Day 28:デザインパターン「行動型パターン」

Day 28では、デザインパターンのうち「行動型パターン」について学習します。 行動型パターンは、オブジェクト間の相互作用や責任の分担に関するパターンです。主な行動型パターンには、ストラテジ、オブザー …

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

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

【C++】Day1-30 総復習/演習問題

以下に、Day 1-30までのC++学習カリキュラムにおける総復習と演習問題を提示します。 演習問題に対する回答と解説も記載しますので、各問題に取り組んで理解を深めてください。 ※後半に回答/解説を記 …