C 中繼承的概念和定義

2022-09-24 17:24:16 字數 1913 閱讀 6433

目錄

繼承機制是物件導向程式設計使**可以復用的最重要的手段,它允許程式設計師在保持原有類特性的基礎上進行擴充套件,增加功能,這樣產生新的類,稱派生類。繼承呈現了物件導向程式設計的層次結構,體現了由簡單到複雜的認知過程。以前我們接觸的復用都是函式復用,繼承是類設計層次的復用。

(1)公有繼承

基類的公有成員,子類可以繼承為自己的公有成員。在派生類可以訪問,在外部也可以訪問。

基類的保護成員,子類可以繼承為自己的保護成員,在派生類可以訪問,在外部不可以訪問。

基類的私有成員,子類不可以訪問基類的私有成員。

(2)保護繼承

基類公有成員,子類中繼承為自己的保護成員,在派生類可以訪問,在外部不可以訪問。

基類保護成員,子類中繼承為自己的保護成員,在派生類可以訪問,在外部不可以訪問。

基類私有成員,子類不可以訪問基類的私有成員。

(3)私有繼承

基類公有成員,子類中繼承為自己的私有成員,在派生類可以訪問,在外部不可以訪問。

基類保護成員,子類中繼承為自己的私有成員,在派生類可以訪問,在外部不可以訪問。

基類私有成員,子類不可以訪問基類的私有成員。

(1)基類private成員任何方式繼承在派生類中都是不可見的。不可見指派生類物件不能去訪問它,但是基類的私有成員還是被繼承到了派生類物件中。

(2)基類的public成員和protected成員任何繼承方式在派生類都可以訪問。

(3)基類pretected成員,派生類可以訪問,類外不能訪問。

(4)基類的其他成員在子類的訪問方式 == min(成員在基類的訪問限定符,繼承方式)。public > protected > private。

(5)使用關鍵字class時預設的繼承方式是private,使用struct時預設的繼承方式是public,不過最好顯示的寫出繼承方式。

class derived : public base //指明繼承方式是public

class derived : base //沒寫的情況下是private

struct derived : base //沒寫的情況下是public

(6)在實際運用中一般使用都是public繼承,幾乎很少使用protetced/private繼承,實際中

擴充套件維護性不強。

派生類物件可以賦值給基類的物件 / 基類的指標 / 基類的引用。

基類物件不能賦值給派生類物件

基類的指標可以通過強制型別轉換賦值給派生類的指標。但是必須是基類的指標是指向派生類物件時才是安全的。

class person //基類/父類

;class student : public person //派生類/子類

;void test ()

在繼承體系中基類和派生類都有獨立的作用域。

子類和父類中有同名成員,子類成員將遮蔽父類對同名成員的直接訪問,這種情況叫隱藏,也叫重定義。(在子類成員函式中,可以使用 基類::基類成員 顯示訪問)

需要注意的是如果是成員函式的隱藏,只需要函式名相同就構成隱藏。

注意在實際中在繼承體系裡面最好不要定義同名的成員。

// b中的fun和a中的fun不是構成過載,因為不是在同一作用域

// b中的fun和a中的fun構成隱藏,成員函式滿足函式名相同就構成隱藏。

class a //基類

};class b : public a //派生類

void fun()

public:

int _b;

char _c;

};class derived : public base //派生類

void fun(int a)

public:

int _d;

int _c;

};int main()

本文標題: c++中繼承的概念和定義

本文位址:

Java中繼承的概念

繼承的概念 繼承指的是乙個類從另乙個類從獲得屬性和方法的過程,它們的關係可以看做是父子的關係,乙個父類,乙個子類。繼承只能是單繼承的,就如乙個父親可以有多個孩子,但是乙個孩子不能有多個父親的道理一樣。繼承使用extends關鍵字。我們首先建立乙個people類 public class people...

C 中繼承和多型的研究

在這個部分,我將構建兩個類a和b,b是a的子類。namespace csharppolymorphism class b a class program 執行結果為 i m a,my value a,got value a i m b,my value b,got value b i m a,my ...

C 中繼承和建構函式

乙個類繼承自另外乙個類,他們的建構函式改怎麼辦?首先必須先宣告 建構函式是不能繼承的 我們先看一段 第一段 沒有建構函式,第二段有乙個,第三段有兩個。從他們的msil可以看出,有幾個建構函式就有幾個.ctor的il函式。即使你沒有建構函式,編譯器也會呼叫乙個空的建構函式。讓我們仔細瞧瞧msil 我們...