首先,上代碼(仍是代碼引起的血案)ide
class A { public: A(){ this; print(); } virtual void print(){ this; cout<<"A"<<endl; } void think(){ this; print(); } virtual ~A(){} private: }; class B:public A { public: B(int temp):A(),x(temp) { } virtual void print() override { this; cout<<"B"<<endl; } virtual ~ B(){} private: int x; };
B b(3);
b.think();函數
輸出的結果:this
A指針
B對象
爲何會出現這種狀況呢?blog
由於子類並不繼承父類的構造函數和析構函數!!!繼承
相反會繼承成員函數和虛函數,作用域
在執行子類的構造函數時,會調用父類的構造函數,記住,是調用,也就是A::A(),這樣一來,是進入了A類的做用域,this指針也就是A類對象的this指針class
而執行成員函數時,由於繼承的關係,因此一直處於子類的做用域,構造函數
記住,只要是子類繼承父類,除了構造函數和析構函數以外,根本不存在父類的做用域,this指針所有都是子類對象的指針!!!!