@剛弄的獨立部落格:http://blog.forgetwind.com,歡迎來踩。
1:類型轉換的前提,記憶體模型匹配。
2:C++多態性:
當C++編譯器在編譯的時候,發現A類的print是虛函數,這個時候C++就會採用
遲綁定(late binding)的技術,在運行時依據對象的類型(在程式中,我們
傳遞的B類的首地址)來確認調用的哪一個函數,這種能力叫做C++的多態性。
(編譯時間確定-normal,or,運行時確定-virtual)
#include <iostream>
using namespace std;
class A {
public:
A() {}
~A() {}
virtual void print() {
cout << "A" << endl;
}
};
class B : public A {
public:
B() {}
~B() {}
virtual void print() {
cout << "B" << endl;
}
};
int main() {
B b;
A *a =&b;
a->print();
//late binding,看print是否在B類中存在,存在則調用衍生類別的print
return 0;
}
3:根據繼承性的原理,基類中的this指標指向衍生類別的對象。
(@孫鑫C++視頻3_測試程式,可調式看運行過程)
#include <iostream>
using namespace std;
class A;
A *pt = NULL;
class A {
public:
A() {
pt = this;
}
virtual void print() {
cout << "基類A的this指標指向A的對象" << endl;
}
};
class B: public A {
public:
B() {}
virtual void print() {
cout << "基類A的this指標指向B的對象" << endl;
}
};
B test;//調用基類的建構函式時,pt指向A中的this。
int main() {
pt->print();
return 0;
}