class A { public: virtual void fun() { cout<<"afun"<<endl; } A() { a=this; a->fun(); } A* a; }; class B:public A { public: virtual void fun() { cout<<"bfun"<<endl; } B() { } }; int main() { B obj; obj.a->fun(); return 0; } |
原帖由 bbmmzz 于 2008-10-23 21:43 發(fā)表
this指針指向的應(yīng)該是基類對(duì)象,這是由于派生類在構(gòu)造時(shí)首先要運(yùn)行基類構(gòu)造函數(shù),構(gòu)造基類部分,然而在運(yùn)行基類構(gòu)造函數(shù)時(shí),派生類對(duì)象并不完整,所以編譯器認(rèn)為派生類對(duì)象類型發(fā)生了變化。因此在基類構(gòu)造函數(shù)中 ...
原帖由 ztz0223 于 2008-10-27 14:46 發(fā)表
在構(gòu)造函數(shù)里面調(diào)用虛函數(shù)是非常不明智的做法
因此你得到了一個(gè)跟理論不同的結(jié)果
看看這個(gè):
http://cpp.ga-la.com/html/24/26/0705/258.htm
歡迎光臨 Chinaunix (http://72891.cn/) | Powered by Discuz! X3.2 |