5

これは、OOPS が私のお気に入りのテーマであると述べたときのインタビューで私に尋ねられました。

Dynamic Polymorphism と Operator Overloading の実際の例を誰か教えてください。

さまざまな形状の領域の計算 (仮想関数 + オーバーライド) や、複素数の追加や文字列の連結 (演算子のオーバーロード) など、コーディングの観点からしか説明できませんでした。

4

5 に答える 5

8

ポリモーフィズム。

車がありますよね。抽象的な車を考えてみてください。どの車も加速できます。それは多態的な関数になります。したがって、各車 (ほとんどの場合、エキゾチックなものは数えません) では、アクセルを踏むためにペダルを踏む必要があります。ただし、それを押した後に何が起こるかは、車によって異なります (読み取り: 実装が定義されています)。

演算子のオーバーロード。

複素数があります。通常の数値と同じように、足し算、引き算、割り算などを行うことができます。ただし、その方法かなり異なります。

更新:質問で複素数について言及したのを見ませんでした((より良いものを考えます。

upd2: そうですね、料理のプロセスについて考えることができます。料理をするときは、いくつかの材料を混ぜる必要があります。足す(同じお皿に盛る)、割る(切る)、掛ける(飲み物を混ぜる)などの操作ができます。私はそれがそれらの演算子をオーバーロードするために行くと思います:P

于 2012-08-14T13:13:26.570 に答える
5

std::cout演算子のオーバーロードの代表的な子の 1 つです。実際のオペレーターの選択は... 疑わしいですが... の拡張性は、<<それ以前のすべて、およびその後のほとんどすべてに比べて非常に優れています。さらに、すべてのMatrixandVectorクラス、イテレータ、関数オブジェクト、オーバーロードされたすべてのクラスを考慮して、 aまたは sorted like<のキーにすることができます。mapstd::string

ポリモーフィズムは非常に単純です。テンプレートの形でパラメトリック ポリモーフィズムがなかったら、どんな生活になるか考えてみてください。なんてこった、それはとても悪いだろう。このコンテナーのコードを新しい型に対して繰り返すか、それはひどく悪い考えvoid*, sizeです。のようなもののインターフェイスqsortも使用できません。パラメトリック ポリモーフィズムにより、コードの再利用タイプ セーフの両方が可能になります。

または動的ポリモーフィズム。std::function仮想関数と継承なしでは機能しません。これは非常に重要なことです。継承に基づいた埋め込み側の最適化もあります。実行時に異なる型を交換可能に扱う必要がある場合はいつでも便利です。また、技術的には動的ポリモーフィズムでなくても、実際には動的ポリモーフィズムであるものがたくさんあります。たとえば、Windows API から呼び出すすべての関数は、動的リンカーによって修正された関数ポインターのテーブルを通過します。それらは、同じインターフェースに準拠するこれらの関数の任意の実装でポリモーフィックです。オペレーティング システムの API がなければ、どんな生活ができるでしょうか? 住めない。

于 2012-08-14T13:22:53.620 に答える
1

動的ポリモーフィズムに関するアイデアがあります。

CarいくつかのサブタイプMaruti-800, Indica, Zen,を持つクラスがあるとしInovaます。

カーレースゲームで、最終目的地に到着した車を止めなければならないとします。現時点では、どのタイプの車を持っているかはわかりません (それがそうであるMaruti-800Indica、他のタイプの車であるか)。そのため、実行時にアクションをCar呼び出して、スーパー クラス参照 (つまり ) のブレークを押す必要があります。BreakCar

これは、動的ポリモーフィズムの好例です。

于 2013-06-08T07:30:06.960 に答える
0

演算子のオーバーロードの例はiostreamoperator <<にあります。または、別の例は「ファンクターを作成する」場合です。

動的ポリモーフィズムは基本的に親の仮想メソッドをオーバーライドし、「インターフェースにプログラムする」(純粋仮想関数)ことを可能にします。これは、「オーバーライドされた」メソッドを使用するために具象型を使用することを強制する静的ポリモーフィズムとは対照的です。これが違いの良い例です。

于 2012-08-14T13:34:55.577 に答える
0

ダイナミック ポリモーフィズム: オートマチック車のスポーツ モード。スポーツモードに切り替えると、同じ圧力をかける同じアクセルペダルを引き続き使用しますが、自動ギアははるかに高い回転数で変更されます.

オペレーターのオーバーロード: 携帯電話。開いているメニューによって、ボタンの機能が異なります。ゲームの D は転送であり、SMS では文字 d を出力します。

于 2012-08-14T13:28:17.850 に答える