C++ は勝手にポインタの値が変わる素敵言語です
2008-01-24 ■[C/C++]もしかしてCの奴らは代入やキャストでポインタのアドレスが変わらないとか思っているのか?
正直日記 2008/01/26 _ もしかしなくても、そう思ってる俺です
まんまここの説明ですね (たまたまネット彷徨ってたら前橋さんのブログに書いてあったのでメモ.これがシンクロニシティってやつですかね)
プログラミング言語を作る日記 2008-01-21 ■[Diksam]Diksamのポリモルフィズム
正直日記 2008/01/26 _ もしかしなくても、そう思ってる俺です
へー。多分vtblの絡みなんだろうけど、しかし何故 b だけ違うアドレスになる
んだろう。むしろ、 a と c のポインタが同一であることに注目するのかしら。
まんまここの説明ですね (たまたまネット彷徨ってたら前橋さんのブログに書いてあったのでメモ.これがシンクロニシティってやつですかね)
プログラミング言語を作る日記 2008-01-21 ■[Diksam]Diksamのポリモルフィズム
ただし、この方法は単一継承であればこそうまくいくのであって、多重継承ではメソッドの添字が一意に決まらないためうまくいきません。そこで、C++では、アップキャストの際にこっそりポインタの値を変えるという豪快な解決法を取っています。たとえばAとBを継承したクラスCがあるとき、AとCは「メインの継承関係」として単一継承の際と同じ方法が取れますが、CがBにアップキャストされた際には、ポインタ自体を、Bのvtableがあるアドレスに変換します。
