覆蓋方法(overriding)
在 c++ 裡,當我們需要在基類裡提供乙個通用的函式,但是在它的某個子類裡,需要修改這個方法的實現,就要用到覆蓋。
覆蓋是存在類中,子類覆蓋是從基類繼承過來的方法(函式)。但是函式名、返回值、引數列表都必須和基類的方法相同。
c++ 可以讓我們很容易實現這種既有共同特徵又需要在不同的類裡有不同實現的方法。簡單的舉個爪子說就是,
動物都知道用嘴吃!那麼吃我們就可以說是動物的乙個
共同特徵
(相當於基類裡面實現吃的方法),但是
我們知道不同動物會有不同的吃法。這個就是
不同的實現方法
。將基類的方法,在子類重新申明一次。
借鑑小甲魚的例程舉例:(
基本的我都是加了注釋
)//覆蓋
#include #include/宣告定義/
///基類//
class animal///定義乙個類 基類
;///定義子類/
class pig: public animal//定義子類
;class turtle: public animal
;animal::animal(std::string thename)//animal構造器
基類方法(函式)//
void animal::eat()//eat()方法(函式)
;///定義子類/
class pig: public animal//定義子類
;class turtle: public animal
;animal::animal(std::string thename)//animal構造器
基類方法(函式)//
void animal::eat()//eat()方法(函式)
{ std::cout<< "animal::eat i'm eatting!" <注意的是:對從基類繼承來的方法進行過載,程式永遠編譯不過的。
總結
方法的覆蓋和過載具有以下相同點:
都要求方法同名
都可以用於抽象方法和非抽象方法之間
方法的覆蓋和過載具有以下不同點:
方法覆蓋要求引數列表(引數簽名)必須一致,而方法過載要求引數列表必須不一致。
方法覆蓋要求返回型別必須一致,方法過載對此沒有要求。
方法覆蓋只能用於子類覆蓋父類的方法,方法過載用於同乙個類中的所有方法(包括從父類中繼承而來的方法)
方法覆蓋對方法的訪問許可權和丟擲的異常有特殊的要求,而方法過載在這方面沒有任何限制。
父類的乙個方法只能被子類覆蓋一次,而乙個方法可以在所有的類中可以被過載多次。
細說C 覆蓋方法和過載方法
很多初學者朋友可能都傻傻分不清覆蓋方法和過載方法的區別是什麼,那麼小雨今天就以例項來給朋友們講解一下。首先說覆蓋方法,讓我們看下面的例子 class animal class pig animal class bird animal void animal move void pig move vo...
覆蓋方法和過載方法
覆蓋方法 通過之前的學習,我們已經知道了如何通過建立新的子類來重用現有的 繼承 雖然這個方案可以讓我們輕鬆解決許多現實世界裡的問題,但在某些場合,卻又顯得不夠用。例如當我們需要在基類裡提供乙個通用的函式,但在它的某個子類裡需要修改這個方法的實現,在 c 裡,覆蓋 overriding 就可以做到。回...
方法覆蓋和方法過載
0 最根本的區別是,方法的過載是不同的方法叫了同樣的名字,而方法的覆蓋是同乙個方法在子類和父類之間的多型表現。1 方法的覆蓋是子類和父類之間的關係,是垂直關係 方法的過載是同乙個類中方法之間的關係,是水平關係。2 覆蓋只能由乙個方法,或只能由一對方法產生關係 方法的過載是多個方法之間的關係。3 覆蓋...