物件導向程式設計中最重要的乙個概念是繼承。繼承允許我們依據另乙個類來定義乙個類,這使得建立和維護乙個應用程式變得更容易。這樣做,也達到了重用**功能和提高執行效率的效果。
當建立乙個類時,您不需要重新編寫新的資料成員和成員函式,只需指定新建的類繼承了乙個已有的類的成員即可。這個已有的類稱為基類,新建的類稱為派生類。
繼承代表了is a關係。
例如,人是乙個基類(也稱父類),男人即為人的派生類(也稱子類);即「男人是人」。
**可以這樣表示:
// 基類
class
people
;//派生類
class
man:
public people
;
乙個類可以派生自多個類,這意味著,它可以從多個基類繼承資料和函式。定義乙個派生類,我們使用乙個類派生列表來指定基類。類派生列表以乙個或多個基類命名。
假設有乙個基類 shape,rectangle 是它的派生類,如下所示:
#include
using namespace std;
// 基類
class shape
void
setheight
(int h)
protected:
int width;
int height;};
// 派生類
class rectangle: public shape};
intmain
(void
)
當上面的**被編譯和執行時,它會產生下列結果:
total area: 35派生類可以訪問基類中所有的非私有成員。因此基類成員如果不想被派生類的成員函式訪問,則應在基類中宣告為 private。
我們可以根據訪問許可權總結出不同的訪問型別,如下所示:
乙個派生類繼承了所有的基類方法,但下列情況除外:
基類的建構函式、析構函式和拷貝建構函式。當乙個類派生自基類,該基類可以被繼承為 public、protected 或 private 幾種型別。繼承型別是通過訪問修飾符 access-specifier 來指定的。基類的過載運算子。
基類的友元函式。
我們幾乎不使用 protected 或 private 繼承,通常使用 public 繼承。當使用不同型別的繼承時,遵循以下幾個規則:
公有繼承(public):當乙個類派生自公有基類時,基類的公有成員也是派生類的公有成員,基類的保護成員也是派生類的保護成員,基類的私有成員不能直接被派生類訪問,但是可以通過呼叫基類的公有和保護成員來訪問。
保護繼承(protected): 當乙個類派生自保護基類時,基類的公有和保護成員將成為派生類的保護成員。
私有繼承(private):當乙個類派生自私有基類時,基類的公有和保護成員將成為派生類的私有成員。
多繼承即乙個子類可以有多個父類,它繼承了多個父類的特性。
c++ 類可以從多個類繼承成員,語法如下:
class 《派生類名》:《繼承方式1>《基類名1>,《繼承方式2>《基類名2>,…其中,訪問修飾符繼承方式是 public、protected 或 private 其中的乙個,用來修飾每個基類,各個基類之間用逗號分隔,如上所示。現在讓我們一起看看下面的例項:;
#include
using
namespace std;
// 基類 shape
class
shape
void
setheight
(int h)
protected
:int width;
int height;};
// 基類 paintcost
class
paintcost};
// 派生類
class
rectangle
:public shape,
public paintcost};
intmain
(void
)
繼承重要說明:
1、子類擁有父類的所有成員變數和成員函式
2、子類就是一種特殊的父類
3、子類物件可以當作父類物件使用
4、子類可以擁有父類沒有的方法和屬性
C 學習 繼承
基類和派生類 class cderived public cbase 基類 派生類public繼承 public成員 public處理 protected成員 protected處理 private成員 不可訪問 protected繼承 public成員 protected處理 protected成...
C 繼承學習筆記
派生類從基類繼承了保護 protected 成員和公有 public 成員函式,但是繼承不了基類的過載建構函式。定義乙個如下基類 class counter counter operator counter n void reset int getcount int getnum counter c...
C 學習筆記 繼承
一 c 中的繼承方式會影響子類的對外訪問屬性 public 修飾的成員變數 方法 在類的內部 類的外部都能使用 protected 修飾的成員變數方法,在類的內部使用,在繼承的子類中可用 private 修飾的成員變數方法,只能在類的內部使用 二 private成員在子類中依然存在,但是卻無法訪問到...