對C++多態的理解 -开发者知识库

對C++多態的理解 -开发者知识库,第1张

轉自http://www.cnblogs.com/douzi2/p/3278064.html

對C++多態的理解 -开发者知识库,第2张

  作為一個C 新手,我淺談一下我對多態的一點理解。

    首先,引用幾句話:

    1、繼承是一種抽象,它允許程序員在某些時候忽略相似對象的差異,又在其他時候利用這些差異。——《C 沉思錄》

    2、繼承就是為多態服務的。

    3、C 中只有通過指針調用虛函數的時候,才能實現多態。

    4、是父類的指針指向子類,而不是反過來。

  5、多態有助於實現拓展性和替換性。

    接下來看一個例子:

對C++多態的理解 -开发者知识库,第3张 對C++多態的理解 -开发者知识库,第4张

假設,父類J最有一個函數(虛函數),名字叫做virtual void Open(“開機”);

子類,D,K,F,X繼承了父類J,都擁有了open這個方法,並分別重寫這個方法,如下:

電視機:void open(){"開始播放節目"}

風扇:void open(){"開始扇風"}

空調:void open(){"開始制冷"}

洗衣機:void open(){"開始洗衣服"}

實現多態的程序:

J* j = NULL; //聲明父類的指針

D d;     //子類創建對象 

F f;      //子類創建對象

K k;     //子類創建對象

X x;     //子類創建對象 

j = &d;        //父類的指針指向子類

//通過父類的指針調用子類對象的函數,也可寫成 (*j).open(); 

j ->open(); //調用的是 :{"開始播放節目"}

j = &f;        //父類的指針指向子類

j ->open(); //調用的是 :{"開始扇風"}

j = &k;        //父類的指針指向子類

j ->open(); //調用的是 :{"開始制冷"}

j = &x;        //父類的指針指向子類

j ->open(); //調用的是 :{"開始洗衣服"}

從上面的程序看,同樣是j ->open();這么一句話,調用的卻是不同的函數,這就是對多態的直觀認識!

父類通過其指針指向子類,父類就能調用子類的函數(該函數,是子類繼承父類的虛函數而來)。

        可能,讀者會說,這多態也沒有什么優勢啊,我用分別子類不是一樣可以調用這些函數嗎?

        那么請讀者再,回味一下“多態有助於實現拓展性和替換性。”這句話。

        還有“繼承是一種抽象,它允許程序員在某些時候忽略相似對象的差異,又在其他時候利用這些差異。”

  這句話。

        希望您看后也有所感悟!

 

 

最佳答案:

本文经用户投稿或网站收集转载,如有侵权请联系本站。

发表评论

0条回复