c++的繼承和多型的區別
狼之行 繼承:是指子類按照一定方式繼承基類的成員及函式。
如果此時定義乙個基類的指標,並把子類的物件傳給這個基類指標.假如子類和基類都有乙個相同函式。那麼這個指標呼叫這個函式則到底呼叫的是基類的函式還是子類的函式呢?答案是:基類的函式。因為函式的呼叫取決於基類的指標型別,而不是取決於指標指向的物件型別。
如下:class shape
shape();
~shape();
display(); //畫乙個多邊形
class crect:public shape
crect();
~crect();
display();
//畫乙個矩形
shape* pshape;
crect rct;
pshape=&rct;
//指向子類物件,最好不要用乙個子類指標指向乙個基類物件,因為這樣危險性大.
pshape->display(); //它呼叫的仍然是基類的shape的display函式即畫乙個多邊形
以上的這種特性就是函式的一般性,即指標呼叫的函式取決於指標型別,而不取決於指向的物件型別。假如這個基類派生了很多子類,且每個子類都定義了個函式對基類的函式進行覆蓋,此時多個基類指標指向不同子類物件,呼叫子類的覆蓋函式,則這些指標的行為都是一樣的,即都是呼叫基類的函式而不是子類相對應的函式。
從上可以看出,這種特性並不具有多型性,因為它不會自動隨著指向的物件而呼叫物件的函式。那麼如何能實現這種特性呢?這時就需要一種技術,即虛函式。虛函式是實現多型性的方法。
虛函式就是在函式的前面加上乙個virtual即可。
虛函式中有一種比較特別:純虛函式。
它的目的:純虛函式不能定義函式的實際動作,它的存在只是為了在衍生類別中對它能夠進行重新定義,實現多
態特性.
它的定義方式:
virtual 函式型別 函式名(引數)= 0; //一定要「= 0」
它的約束:如果乙個類中有純虛函式,則這個類叫做抽象類,它是不能定義物件的。
多型和繼承的區別
類和物件的區別 它們的關係是,物件是類的例項,類是物件的模板 物件導向的四要素 封裝 wrap 繼承 inheritance 過載 override 還是多型 polymorphism 亦或是其他?封裝是優點,繼承是基礎,過載是特點,而多型則是特徵。過載,繼承,重寫和多型,泛型的區別 1 過載是在乙...
java中繼承和多型的區別
嘿嘿,舉乙個比較容易理解的例子。主人公 李啟銘 李剛 經典語錄 我爸是李剛 例子開始 從李啟銘說的那句 我爸是李剛,是很有科學依據的,用程式設計的原理看,它符合繼承和多型的物件導向程式設計的這2大特性。先說一說,繼承,繼承就是子類可以繼承父類中的屬性和方法。包括私有的屬性和方法,只是由於私有的方法無...
java中繼承和多型的區別
嘿嘿,舉乙個比較容易理解的例子。主人公 李啟銘 李剛 經典語錄 我爸是李剛 例子開始 從李啟銘說的那句 我爸是李剛,是很有科學依據的,用程式設計的原理看,它符合繼承和多型的物件導向程式設計的這2大特性。先說一說,繼承,繼承就是子類可以繼承父類中的屬性和方法。包括私有的屬性和方法,只是由於私有的方法無...