天天看點

c++中基類與派生類中隐含的this指針的分析

先不要看結果,看一下你是否真正了解了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 -&gt; Parent* this;想一想這是必須的,

why?因為h()隻是派生類繼承基類的,并沒有進行重寫!如果沒有進行this的類型提升,那麼

如果h()方法中存在對基類私有成員的通路,比如這個子類中的y()方法是私有的!h()中調用了

y(); 也就是this-&gt;y();是不是沖突了?派生類中怎麼可以通路基類中的私有成員呢???

是以this的類型一定向上提升了!

如果還是不信,那你看一下 樣例2 中的x值是不是輸出的是基類中的 x 的值!

再看一看 樣例3中的輸出是不是和樣例2的輸出時一樣的!從f()的調用和g()調用

可以看出是多态的結果...

本文轉自 小眼兒 部落格園部落格,原文連結:http://www.cnblogs.com/hujunzheng/p/3963320.html,如需轉載請自行聯系原作者

繼續閱讀