ポリモーフィズムの導入
メニューを表示するにはスワイプしてください
ポリモーフィズムは、重要な概念。ギリシャ語で「多くの形」を意味し、異なるclassesのオブジェクトを共通のスーパークラスのオブジェクトとして扱うことを可能にする。最も重要な点は、異なるエンティティが同じメッセージやメソッド呼び出しに対して独自の方法で応答できることである。
ポリモーフィズムの種類
ポリモーフィズムには主に2つの種類がある:コンパイル時(静的)と実行時(動的)。それぞれの使い方とタイミングを理解することは、柔軟で効率的なコードを書くために重要。
-
コンパイル時ポリモーフィズム:関数や演算子のオーバーロードによって発生し、実行するメソッドはコンパイル時に決定される。
-
実行時ポリモーフィズム:仮想関数を使用し、派生クラスが基底クラスのメソッドをオーバーライドできる。正しいメソッドは実行時に選択される。
ポリモーフィズムの応用と必要性
ポリモーフィズムを理解する優れた方法は、実世界の例えを用いること。たとえば、グラフィカルユーザーインターフェースにあるボタンを考える。このボタンは状況によって異なる動作をすることができる—アップロードボタン、リセットボタン、キャンセルボタンとして機能する場合がある。
各ボタンはクリックされると異なるアクションを実行しますが、いずれも本質的にはボタンとして機能します。この概念の理論的な実装例を見てみましょう。
UploadButton.h
ResetButton.h
CancelButton.h
1234class UploadButton : public Button { public: void onClick() { std::cout << "Upload" << std::endl; } };
すべてのボタンが異なる実装を持つ同じonClick()メソッドを共有していることを考慮し、さらに深く掘り下げてみましょう。もし、ボタンのclassesのいずれかに属するオブジェクトをパラメータとして受け取る関数が必要になった場合はどうなるでしょうか?
main.cpp
1234567891011void 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関数内でも、どの関数を呼び出すかを判断するための追加のチェックが必要になります。ポリモーフィズムを利用することで、これらの問題を容易に解決できます。
フィードバックありがとうございます!
AIに質問する
AIに質問する
何でも質問するか、提案された質問の1つを試してチャットを始めてください