在基類與派生類之間,有乙個規定:派生類物件的位址可以賦給指向基類物件的指標變數(簡稱基類指標),即基類指標也可以指向派生類物件。為什麼有這一規定呢?因為它可以實現多型性【
1】,即向不同的物件傳送同乙個訊息,不同的物件在接受時會產生不同的行為。
舉例說明:
#include using namespace std;
class shape ;
class square : public shape
virtual double area() const };
class circle : public shape
virtual double area() const
}; int main()
return 0;
}
上面的不同物件sq,cir(來自繼承同一基類的不同派生類)接受同一訊息(求面積,來自基類的成員函式area()),但是卻根據自身情況呼叫不同的面積公式(執行了不同的行為,它是通過虛函式實現的)。我們可以理解為,繼承同一基類的不同派生物件,對來自基類的同一訊息執行了不同的行為,這就是多型,它是通過繼承和虛函式實現的。而接受同一訊息的實現就是基於基類指標。
[1]: c++支援兩種形式的多型性。第一種是編譯時的多型性,稱為靜態聯編。第二種是執行時的多型性,也稱為動態聯編。執行時的多型性是指必須在執行中才可以確定的多型性,是通過繼承和虛函式來實現的。
為什麼要用基類指標指向派生類物件?
在基類與派生類之間,有乙個規定 派生類物件的位址可以賦給指向基類物件的指標變數 簡稱基類指標 即基類指標也可以指向派生類物件。為什麼有這一規定呢?因為它可以實現多型性,即向不同的物件傳送同乙個訊息,不同的物件在接受時會產生不同的行為。舉例說明 include using namespace std ...
基類指標指向派生類
include class a virtual void vt private void a2 protected void a3 class b public a virtual void vt private void b2 protected void b3 int main 結論 1 對於派...
基類指標指向派生類物件
成員函式一般化三個結論 include using std cout using std endl class employee class dev public employee int main 1.如果以 基類指標 指向 派生類物件 那麼經由該指標只能呼叫基類所定義的函式 2.如果以 派生類指...