直接用子類物件呼叫函式當然沒問題,基類指標指向派生類物件是多型性的體現。
什麼是多型呢?多型就是不同物件接受相同的訊息,但是卻產生不同的行為,舉一個很簡單的例子,有一個圖形類,他有幾個派生類,如圓形,三角形,矩形。圖形類有一個函式area();用來求面積,但是由於不同圖形求面積的方法不同,要由具體的派生類來決定,所以可以把它定義為一個虛擬函式,由派生類來過載這個函式,所以不同的派生類裡面area()函式的函式體是不同的,
建立一個基類指標*p,讓他指向不同的派生類物件,p在呼叫area()方法時,就會呼叫派生類的area()方法了。
多型的一個好處就是提高了程式碼的重用性,如果圖形類又有一個新的派生類五邊形,要求他的面積只需要把剛才的p指標再指向一個五邊形物件,而其他的程式碼無需任何更改!
在附上例子吧!
class shape
{ public:
virtual int area();
}
class circle: public shape
{
virtual int area()
...
class triangle: public shape
class rectangle: public shape
int main()
shape *p;
circle c;
triangle t;
rectangle r;
p=&c;
p->area();//呼叫circle的area();
p=&t;
p->area();//呼叫triangle的area();
p=&r;
p->area();//呼叫rectangle的area();
只是大概意思,供參考。
直接用子類物件呼叫函式當然沒問題,基類指標指向派生類物件是多型性的體現。
什麼是多型呢?多型就是不同物件接受相同的訊息,但是卻產生不同的行為,舉一個很簡單的例子,有一個圖形類,他有幾個派生類,如圓形,三角形,矩形。圖形類有一個函式area();用來求面積,但是由於不同圖形求面積的方法不同,要由具體的派生類來決定,所以可以把它定義為一個虛擬函式,由派生類來過載這個函式,所以不同的派生類裡面area()函式的函式體是不同的,
建立一個基類指標*p,讓他指向不同的派生類物件,p在呼叫area()方法時,就會呼叫派生類的area()方法了。
多型的一個好處就是提高了程式碼的重用性,如果圖形類又有一個新的派生類五邊形,要求他的面積只需要把剛才的p指標再指向一個五邊形物件,而其他的程式碼無需任何更改!
在附上例子吧!
class shape
{ public:
virtual int area();
}
class circle: public shape
{
virtual int area()
{
...
}
}
class triangle: public shape
{
virtual int area()
{
...
}
}
class rectangle: public shape
{
virtual int area()
{
...
}
}
int main()
{
shape *p;
circle c;
triangle t;
rectangle r;
p=&c;
p->area();//呼叫circle的area();
p=&t;
p->area();//呼叫triangle的area();
p=&r;
p->area();//呼叫rectangle的area();
}
只是大概意思,供參考。