ダブルディスパッチは関数のオーバーロード以上であるとは? わかりやすく解説

Weblio 辞書 > 辞書・百科事典 > ウィキペディア小見出し辞書 > ダブルディスパッチは関数のオーバーロード以上であるの意味・解説 

ダブルディスパッチは関数のオーバーロード以上である

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2017/12/19 13:38 UTC 版)

ダブルディスパッチ」の記事における「ダブルディスパッチは関数のオーバーロード以上である」の解説

一見したところでは、ダブルディスパッチ関数オーバーロードの自然な結果である。関数オーバーロード呼び出されるクラスだけではなく引数の型にも応じて呼び出しが行われるようにすることができるが、オーバーロードされた関数呼び出しはほぼ一つ仮想関数テーブル通じて行われるため、動的なディスパッチ呼び出すオブジェクトの種類によってのみ決まる。下記の例において、あるゲーム衝突判定を行う場合考える。 class SpaceShip {};class GiantSpaceShip : public SpaceShip {};class Asteroid {public: virtual void CollideWith(SpaceShip&) { cout << "Asteroid hit a SpaceShip" << endl; } virtual void CollideWith(GiantSpaceShip&) { cout << "Asteroid hit a GiantSpaceShip" << endl; }};class ExplodingAsteroid : public Asteroid {public: virtual void CollideWith(SpaceShip&) { cout << "ExplodingAsteroid hit a SpaceShip" << endl; } virtual void CollideWith(GiantSpaceShip&) { cout << "ExplodingAsteroid hit a GiantSpaceShip" << endl; }}; ここで、 Asteroid theAsteroid;SpaceShip theSpaceShip;GiantSpaceShip theGiantSpaceShip; があるとすると、関数オーバーロードのために theAsteroid.CollideWith(theSpaceShip); theAsteroid.CollideWith(theGiantSpaceShip); 上記コードは、動的なディスパッチ使用せずAsteroid hit a SpaceShip および Asteroid hit a GiantSpaceShip とそれぞれ表示する。 さらに、 ExplodingAsteroid theExplodingAsteroid;theExplodingAsteroid.CollideWith(theSpaceShip); theExplodingAsteroid.CollideWith(theGiantSpaceShip); 上記コードはExplodingAsteroid hit a SpaceShip およびExplodingAsteroid hit a GiantSpaceShip と、やはり動的なディスパッチ使用せず表示するAsteroid対す参照使って動的なディパッチを用いると、 Asteroid& theAsteroidReference = theExplodingAsteroid;theAsteroidReference.CollideWith(theSpaceShip); theAsteroidReference.CollideWith(theGiantSpaceShip); ExplodingAsteroid hit a SpaceShip および ExplodingAsteroid hit a GiantSpaceShipと期待通り表示する。 しかし、 SpaceShip& theSpaceShipReference = theGiantSpaceShip;theAsteroid.CollideWith(theSpaceShipReference); theAsteroidReference.CollideWith(theSpaceShipReference); は、Asteroid hit a SpaceShip および ExplodingAsteroid hit a SpaceShip表示するが、これはいずれ正しくない問題は、仮想関数C++ によって動的にディスパッチが行われるのに対して関数オーバーロード静的行われるためである。

※この「ダブルディスパッチは関数のオーバーロード以上である」の解説は、「ダブルディスパッチ」の解説の一部です。
「ダブルディスパッチは関数のオーバーロード以上である」を含む「ダブルディスパッチ」の記事については、「ダブルディスパッチ」の概要を参照ください。

ウィキペディア小見出し辞書の「ダブルディスパッチは関数のオーバーロード以上である」の項目はプログラムで機械的に意味や本文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。 お問い合わせ



英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

ダブルディスパッチは関数のオーバーロード以上であるのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



ダブルディスパッチは関数のオーバーロード以上であるのページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
ウィキペディアウィキペディア
Text is available under GNU Free Documentation License (GFDL).
Weblio辞書に掲載されている「ウィキペディア小見出し辞書」の記事は、Wikipediaのダブルディスパッチ (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。

©2024 GRAS Group, Inc.RSS