先不要看結果,看一下你是否真正了解了this指標?
1 #include2using
namespace
std;34
class
parent
10 parent(int
x)14
virtual
void
f()17
void
g()20
21void
h()28
29private:30
void
y()33
};34
35class child : public
parent
41 child(int x) : parent(x+5)
47void
f()50
void
g()53
};54
55int
main()
/*首先child繼承了parent中的 h()方法!parent::h()
child f()
parent::g()
parent::y()
look here: 9306304
parent::h()
child f()
parent::g()
parent::y()
look here: 10
parent::h()
child f()
parent::g()
parent::y()
look here: 10
*/
我們new 了乙個child類的物件***, 用ch指向了它!
當ch去呼叫h()方法的時候,好了關鍵的問題來了,那就是此時的this指標到底是指向誰的....
要知道,this指標是和物件相關的,所以無論怎樣,那麼呼叫h()方法的是***這個物件,
那麼this就是指向***這個物件***!在入棧的時候,this也一同被壓入!既然this是指向***
的,為什麼會呼叫基類的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()呼叫
可以看出是多型的結果...
C 中的基類與派生類
繼承方式 說明 public 基類的public和protected的成員被派生類繼承後,保持原來的狀態 private 基類的public和protected的成員被派生類繼承後,變成派生類的private成員 protected 基類的public和protected的成員被派生類繼承後,變成派...
基類與派生類
初學c 的時候,很多人都很頭疼各種訪問標號下基類與派生類的關係,其實,死記硬背肯定不是乙個好的辦法,要知道它們之間的關係,先要分析一下訪問標號是如何產生的 在沒有繼承之前,類的只有兩類使用者 類本身和類的使用者。把類成員通過public和private劃分恰好體現了這一分割 類的使用者只能訪問類的p...
理解C 基類與派生類
通過繼承機制,可以利用已有的資料型別來定義新的資料型別。所定義的新的資料型別不僅擁有新定義的成員,而且還同時擁有舊的成員。我們稱已存在的用來派生新類的類為基類,又稱為父類。由已存在的類派生出的新類稱為派生類,又稱為子類。在c 語言中,乙個派生類可以從乙個基類派生,也可以從多個基類派生。從乙個基類派生...