先不要看結果,看一下你是否真正了解了this指針?
<a></a>
首先Child繼承了Parent中的 h()方法!
我們new 了一個Child類的對象XXX, 用ch指向了它!
當ch去調用h()方法的時候,好了關鍵的問題來了,那就是此時的this指針到底是指向誰的....
要知道,this指針是和對象相關的,是以無論怎樣,那麼調用h()方法的是XXX這個對象,
那麼this就是指向XXX這個對象XXX!在入棧的時候,this也一同被壓入!既然this是指向XXX
的,為什麼會調用基類的g()方法呢?然後又調用的是派生類中的f()方法呢?(注意:g()方法
和f()方法在基類和派生類中都有).....
仔細看一下,是不是感覺和派生類向上轉型為基類的多态差不多啊。子類在調用h()方法時,其實
預設将this的類型進行了向上提升,也就是由Child* this -> Parent* this;想一想這是必須的,
why?因為h()隻是派生類繼承基類的,并沒有進行重寫!如果沒有進行this的類型提升,那麼
如果h()方法中存在對基類私有成員的通路,比如這個子類中的y()方法是私有的!h()中調用了
y(); 也就是this->y();是不是沖突了?派生類中怎麼可以通路基類中的私有成員呢???
是以this的類型一定向上提升了!
如果還是不信,那你看一下 樣例2 中的x值是不是輸出的是基類中的 x 的值!
再看一看 樣例3中的輸出是不是和樣例2的輸出時一樣的!從f()的調用和g()調用
可以看出是多态的結果...
本文轉自 小眼兒 部落格園部落格,原文連結:http://www.cnblogs.com/hujunzheng/p/3963320.html,如需轉載請自行聯系原作者