回覆列表
  • 1 # 使用者7169188564904

    直接用子類物件呼叫函式當然沒問題,基類指標指向派生類物件是多型性的體現。

    什麼是多型呢?多型就是不同物件接受相同的訊息,但是卻產生不同的行為,舉一個很簡單的例子,有一個圖形類,他有幾個派生類,如圓形,三角形,矩形。圖形類有一個函式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();

    }

    只是大概意思,供參考。

  • 中秋節和大豐收的關聯?
  • 李白在哪裡死的?