Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
学ぶ ポリモーフィズムのイントロダクション | イントロダクション
C++ OOP原則

bookポリモーフィズムのイントロダクション

メニューを表示するにはスワイプしてください

Note
定義

ポリモーフィズムは、重要な概念。ギリシャ語で「多くの形」を意味し、異なるclassesオブジェクトを共通のスーパークラスオブジェクトとして扱うことを可能にする。最も重要な点は、異なるエンティティが同じメッセージやメソッド呼び出しに対して独自の方法で応答できる能力。

ポリモーフィズムの種類

ポリモーフィズムには主に2つの種類がある:コンパイル時(静的)実行時(動的)。それぞれの使い方とタイミングを理解することは、柔軟で効率的なコードを書くために重要。

  • コンパイル時ポリモーフィズム:関数や演算子のオーバーロードによって発生し、実行するメソッドはコンパイル時に決定される。

  • 実行時ポリモーフィズム:仮想関数を使用し、派生クラスが基底クラスのメソッドをオーバーライドできる。正しいメソッドは実行時に選択される。

ポリモーフィズムの応用と必要性

ポリモーフィズムを理解する優れた方法は、実世界のアナロジーを用いること。たとえば、グラフィカルユーザーインターフェースのボタンを考える。このボタンはコンテキストによって異なる動作をすることがあり、アップロードボタンリセットボタンキャンセルボタンとして機能する場合がある。

各ボタンはクリック時に異なる動作を実行しますが、いずれも本質的にはボタンとして機能します。この概念の理論的な実装例を見てみましょう。

UploadButton.h

UploadButton.h

ResetButton.h

ResetButton.h

CancelButton.h

CancelButton.h

copy
1234
class UploadButton : public Button { public: void onClick() { std::cout << "Upload" << std::endl; } };

すべてのボタンが同じonClick()メソッドを持ちつつも実装が異なることを踏まえ、さらに深く考えてみましょう。もし、ボタンclassesのいずれかに属するオブジェクトパラメータとして受け取る関数が必要になった場合はどうなるでしょうか?

main.cpp

main.cpp

copy
1234567891011
void user_clicked_upload_button(const UploadButton& btn) { btn.onClick(); } void user_clicked_reset_button(const ResetButton& btn) { btn.onClick(); } void user_clicked_cancel_button(const CancelButton& btn) { btn.onClick(); }

ご覧のとおり、各ボタンごとに個別の関数を手動で作成すると、特に修正時に複雑さが増すことがあります。問題が発生した場合、各関数を個別に編集する必要があります。また、main関数内でも、どの関数を呼び出すかを判断するための追加のチェックが必要になります。ポリモーフィズムを利用することで、これらの問題を容易に解決できます。

question mark

ポリモーフィズムという用語の文字通りの意味は何ですか?

正しい答えを選んでください

すべて明確でしたか?

どのように改善できますか?

フィードバックありがとうございます!

セクション 1.  13

AIに質問する

expand

AIに質問する

ChatGPT

何でも質問するか、提案された質問の1つを試してチャットを始めてください

セクション 1.  13
some-alt