C++相談室 Part4
■ このスレッドは過去ログ倉庫に格納されています
0331観筒
NGNG>Inside the C++ Object Model
amazonで探したら、洋書しか出てこなかったんですが…。和訳されてないんですかね?
へたれアマグラマなんで、「英語で読め」は勘弁してください。(T_T)
>>330
あー、俺が勘違いしていた部分まで踏まえて、完璧な回答ありがとうございます。
なるほどー、virtualでないメンバ関数は、インスタンスのサイズに影響はないんですね。
てっきりインスタンスがメンバ関数まで丸ごと抱えているのかと思ってました。
あ、もしかして、メンバ関数を呼び出すときって、インスタンスのアドレスをスタックに
積んでから呼び出してるんですか? それで、メンバ関数内では、渡されたインスタンスの
アドレスをthisとして扱う…と。そういう仕組みですか?
と。そこで、生まれてきた疑問を。
class HOGE{
public:
int Boo(int){cout << foo();}
private:
virtual const char* foo(void){return "ほげ";}
}
class HOGE_EX : public HOGE{
private:
virtual const char* foo(void){return "ほげEX";}
}
int main(void){
HOGE_EX HE;
HE.Boo();
return 0;
}
この場合、表示されるのは「ほげEX」ですか? こういう風に基底クラスの
内部で仮想関数が呼ばれる場合のオーバーライドの例って、見たことがないんです
けど、上の俺の考えが合ってるなら、「ほげEX」と表示されるはずだと思うんですが…。
■ このスレッドは過去ログ倉庫に格納されています