【初心者歓迎】C/C++室 Ver.43【環境依存OK】
レス数が950を超えています。1000を超えると書き込みができなくなります。
0951デフォルトの名無しさん
2007/11/02(金) 19:45:43CHoge ← CChild
という継承を行い、CChildで virtual int test() という関数をオーバーライドしたとします
この状態で
p = new CChild();
とやり、CHogeのコンストラクタでtest()を呼び出したとしても、オーバーライドされていないtest()が呼び出されますよね
この実装自体は別に構わないのですが、何故このような仕組みになっているのでしょうか?
コンパイラ的には、オーバーライドされたほうを呼び出させることは難しくないと思います
(CChildのコンストラクタの頭でCHogeのコンストラクタを呼ぶ前に、vtblだけは初期化してしまえばいいですよね)
事実、Javaはオーバーライドされたほうのtestが呼ばれます
何故C++では、オーバーライド前のtest()を呼ぶ仕組みになっているのでしょうか?
レス数が950を超えています。1000を超えると書き込みができなくなります。