私はオブジェクト指向プログラミングのコア機能を学ぼうとしています。これは奇妙な質問かもしれませんが、私は聞きたいです:
同じ署名を持つメンバー関数を呼び出すために、関数テンプレートインスタンスの代わりに継承とポリモーフィズムを使用するのはなぜですか?
テンプレートは、コンパイル時に(静的に)機能する機能であり、コードを読み取り、各種類のオブジェクトが何であるかを確認することで、関連するすべてのオブジェクトのタイプを計算できます。
一方、継承とポリモーフィズムは、コンパイル時にオブジェクトのタイプが何であるかを知ることができない場合に設計されています。
例として、次のコードについて考えてみます。
Base* ptr = randomCoinTossIsHeads()? new Derived1() : new Derived2();
ptr->virtualFunction();
ここでは、ptrが指しているオブジェクトのタイプを静的に(コンパイル時に)知る方法はありません。Derived1になる確率は50%、Derived2になる確率は50%です。これは、ここでテンプレートを使用して、呼び出す関数を決定できなかったことを意味します。テンプレートは、コードが生成されたときに処理しているものの種類を正確に知っていることを前提としていますが、ここではそうではありません。
お役に立てれば!
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加