C Record33 派生類的訪問控制

2021-10-02 09:33:22 字數 3448 閱讀 4403

目錄

單個類的訪問控制

c++中的繼承方式會影響子類的對外訪問屬性

公有繼承**

私有繼承**

保護繼承**

判斷總結

c++中子類對外訪問屬性表

總體**

派生類繼承了基類的全部成員變數和成員方法(除了構造和析構之外的成員方法),但是這些成員的訪問屬性,在派生過程中是可以調整的。

首先要明白:public:修飾的成員變數 方法 在類的內部 類的外部都能使用;protected:修飾的成員變數方法,在類的內部使用 ,在繼承的子類中可用

;其他 類的外部不能被使用;private:修飾的成員變數方法 只能在類的內部使用 不能在類的外部。

注意在乙個專案中,定義的兩個檔案中的類名如果有相同的,編譯器可能會存在「串包」呼叫錯誤的風險,注意不要讓類名重複。

萬萬注意:protected關鍵字是為了在家族中使用,就是為了繼承而用的。

public繼承:父類成員在子類中保持原有訪問級別

private繼承:父類成員在子類中變為private成員

protected繼承:父類中public成員會變成protected

父類中protected成員仍然為protected

父類中private成員仍然為private

private成員在子類中依然存在,但是卻無法訪問到。不論種方式繼承基類,派生類都不能直接使用基類的私有成員

舉個例子,還是先定義乙個父類:

class parent

;

公有繼承,就說明子類跟父類是一致的,呼叫子類建立的物件,就是呼叫父類建立的物件。

class child : public parent

protected:

private:

};

void main21()

通過主函來進行呼叫,由於是私有繼承,那麼子類中所呼叫到的所有父類屬性,都是私有的,都不能通過外部直接訪問,所以,只要涉及到的是父類的屬性,都是不可以被呼叫的。

而c3是通過保護繼承建立的,b本身是保護屬性。保護屬性很特殊,既不對外公開,也不對內公開,就是用來繼承傳遞一些重要的屬性來用。只能在保護繼承的子類中呼叫父類的保護屬性,才能成功!

然後,通過保護繼承的方式來建立乙個子類,也可以說保護這個屬性就是為了繼承這個操作而準備的,看看子類的成員與父類的成員是什麼關係:

class child3 : protected parent

};

對於在保護繼承的子類,可以呼叫父類的保護屬性,但同樣不能呼叫父類的私有屬性。

通過主函來呼叫:

void main()

在保護繼承的子類所建立的物件中,父類的屬性對於子類來說,都是保護屬性,不能通過外部來直接呼叫,故都不能通過建立的物件來使用。

保護屬性很特殊,既不對外公開,也不對內公開,就是用來繼承傳遞一些重要的屬性來用。只能在保護繼承的子類中呼叫父類的保護屬性,才能成功!

c++中的繼承方式(public、private、protected)會影響子類的對外訪問屬性,判斷某一句話,能否被訪問,依據"三看"原則:

1)看呼叫語句,這句話寫在子類的內部還是外部;

2)看子類如何從父類繼承(public、private、protected);

3)看父類中的訪問級別(public、private、protected);

父類成員訪問級別繼承

方式public

proteced

private

public

public

proteced

private

proteced

proteced

proteced

private

private

private

private

private

其中,紅色表明在父類中的成員屬性;藍色表示子類的繼承方式。

派生類訪問控制的結論:

1 protected 關鍵字 修飾的成員變數 和成員函式 ,是為了在家族中使用 ,是為了繼承

2 專案開發中 一般情況下 是 public繼承

3 只能在當前類中訪問的成員設定為private

dm02_單個類的訪問控制.cpp

#include using namespace std;

//public 修飾的成員變數 方法 在類的內部 類的外部都能使用

//protected: 修飾的成員變數方法,在類的內部使用 ,在繼承的子類中可用 ;其他 類的外部不能被使用

//private: 修飾的成員變數方法 只能在類的內部使用 不能在類的外部

//派生類訪問控制的結論

//1 protected 關鍵字 修飾的成員變數 和成員函式 ,是為了在家族中使用 ,是為了繼承

//2 專案開發中 一般情況下 是 public

//3class parent

;//保護繼承

class child3 : protected parent

};void main()

//私有繼承

class child2 : private parent

protected:

private:

};void main22()

class child : public parent

protected:

private:

};/*

c++中的繼承方式(public、private、protected)會影響子類的對外訪問屬性

判斷某一句話,能否被訪問

1)看呼叫語句,這句話寫在子類的內部、外部

2)看子類如何從父類繼承(public、private、protected)

3)看父類中的訪問級別(public、private、protected)

*///共有繼承

void main21()

void set(int a, int b, int c) };

class b : public a

};class c : protected a

};class d : private a

};int main()

15 7 派生類拷貝控制

目錄15.7.3 派生類的拷貝控制成員 15.7.4 繼承的預設建構函式 在基類中將析構函式定義為虛函式,用動態繫結機制來保證執行正確的析構函式版本 class base derived是base的派生類 base itemp new base 靜態型別與動態型別一致 delete itemp 呼叫...

1 4 3 7 派生類的構造方法

根據改寫。加入自己見解使其更易懂 如下 功能 講述上圖派生類建構函式的執行順序 包含各層次類都靜態構造 例項建構函式 public class mybaseclass public mybaseclass 5.第乙個類的例項建構函式執行 public class mydrivedclass myba...

(35 1)派生類的建構函式

建構函式和類的名字是一致的 派生類名 形式引數列表 基類名 基類建構函式實參列表 派生類初始化列表 class point 建構函式 class rect public point 派生類建構函式 類名 形式引數列表 子物件名 子物件建構函式實參列表 類初始化列表 classa a類沒有建構函式,系...