C 訪問控制

2021-10-23 19:05:13 字數 3021 閱讀 2654

c++標準中定義了三種類成員訪問控制符,公有的public,保護的protected,私有的private,這是在類的內部宣告這三種控制符的意思

訪問控制就是c++提供的一種用來保護類裡的方法和屬性的手端(保護即對誰可以呼叫某個方法和訪問某個屬性加上乙個限制 如果某個物件試圖呼叫乙個它無權進行訪問的函式 編譯器將報錯)

public成員:能被本類的成員函式 (此類中任何型別的控制符宣告的成員函式都可以訪問)、友元函式、本類的物件、其派生類的成員函式 (不管是哪一種控制符宣告的成員函式,都可以訪問此類的public成員)

protected成員:能被本類的成員函式(此類中任何型別的控制符宣告的成員函式都可以)、友元函式、其派生類的成員函式(不管是哪一種控制符宣告的成員函式,都可以)與public成員相比 本類的物件及派生類的物件都不得訪問此類protected成員

private成員:能被本類的成員函式 (不管是哪一種控制符宣告的成員函式,都可以)、友元函式訪問 。與public和protected成員相比 本類及派生類的物件 派生類的成員函式 均不可訪問此類 private成員

總結:

public成員允許類物件對public屬性的類成員進行訪問

protected訪問屬性下的類成員雖然允許類成員函式對類成員進行訪問 但是 不允許類物件及其派生類物件對其進行訪問

private訪問屬性下的類成員只允許本類中的成員函式對類成員進行訪問 不允許本類物件,派生類物件,派生類成員函式對其進行訪問

注意

1.對類的使用者而言(即使用類物件例項的人還有一種說法就是指只能看到類的標頭檔案的人,因為設計類的人都將他寫的實現檔案編譯成了二進位制檔案(在windows下是.lib,.obj字尾的檔案)通過類物件的例項只能訪問到類的public訪問型別成員(成員函式或變數)

2.對類本身而言,即類的設計者,在設計類的過程中,在設計類的過程中,可以通過類的所有的成員函式(任何型別的控制符宣告)或者友元函式 訪問其類內部的所有訪問型別的成員(函式和變數)

3.對該類的派生類而言,基類的public、protected的成員對它來說是可見的,即可以訪問 ,至於派生類如何對基類的三種訪問型別的成員進行訪問,涉及了c++類繼承的知識接下來會進行解釋

在繼承機制中,會涉及到兩層訪問控制符,一層在子類派生列表中,一層在基類中(派生類的記憶體模型分為兩部分 :基類部分和派生類部分,其中基類部分是從基類繼承而來的,派生類是自己定義的)

子類派生列表中的訪問控制符:

上述子類派生列表中的訪問控制符影響的是派生類中繼承自基類的基類部分成員 (函式或變數)的訪問控制許可權(也僅僅只有這一點影響),具體的影響為:

public繼承(保持不變):派生類中繼承自基類部分的成員(函式或變數)的訪問控制許可權和其在基類中宣告的許可權一樣(public繼承後,子類可以訪問父類的public,protected成員,子類的客戶(即子類外部)還是保持原有的訪問許可權)

protected繼承(各自降低乙個許可權):派生類繼承自基類中的public成員在派生類中變成protected許可權,基類中其他成員經繼承後再派生類中都變為private許可權( protected繼承後,子類仍可以訪問父類的public,protected成員,子類的客戶就不能訪問這些成員了)

private繼承(全部變為private成員):派生類繼承自基類部分的成員(函式或變數)經繼承後在派生類中的訪問控制許可權全部變為private成員(private繼承後,子類仍可以訪問父類的public,protected成員,子類的客戶也不能訪問這些成員了)

注意:?

1.不管是什麼繼承方式,基類的private成員其派生類都是不可以直接訪問的(派生類可通過其他介面間接訪問)

2.無論控制許可權如何,繼承方式如何,派生類會繼承其基類的所有成員(包括private成員)訪問許可權和繼承方式只決定派生類對基類成員的可訪問屬性

3.public,protected,private這三種繼承方式,不會影響派生類成員訪問基類的成員

4.不管是哪種繼承方式,派生類都可以訪問基類的public,protected成員

類繼承結構下的訪問控制 **演示

#include

using

namespace std;

class

basic

;//todo基類中三種不同訪問屬性下的成員函式

void basic::

basicpubfux()

void basic::

basicprofux()

void basic::

basicprifux()

//todo派生自基類basic的擁有三個不同型別的控制訪問符的派生類sub sub2 sub3

class

sub:

public basic

;class

sub2

:protected basic

;class

sub3

:private basic

;void sub::

subpubpub()

void sub2::

subpropro()

void sub3::

subpripri()

intmain()

節選自:

c++訪問控制符詳解?

C 訪問控制

在c 中有三種訪問控制說明符 public protected private 一 訪問類中成員情況 private 只允許類內成員函式和友元函式訪問,不允許類的物件訪問 protected 只允許類內成員函式 子類內成員函式和友元函式訪問,不允許類的物件訪問 public 允許類內成員函式 子類內...

c 訪問控制

1.類內的訪問控制 在基類中,public和private具有普通的含義 使用者 即基類的物件 可以訪問public成員 包括函式 資料 而不能訪問private成員。private只能被基類的成員和友員訪問。注 基類的物件無權訪問private成員 派生類對基類的public和private具有相...

C 中訪問控制

1 include 2 using namespace std 3 4 class a 11 void disp a a 12 那麼某個函式通過類p訪問 o中成員時,該函式對類o中的 public 成員只有 protected 許可權。我們經常聽到這樣的說法 protected private pu...