訪問控制與繼承

2021-07-02 00:19:02 字數 1439 閱讀 7500

每個類分別控制自己的成員初始化過程,與之類似,每個類還分別控制著其成員對於派生類來說是否可訪問

受保護的成員

乙個類使用protected關鍵字來宣告那些它希望與派生類分離但是不想被其他公共訪問使用的成員。

1。和私有成員類似,受保護的成員對於類的使用者來說是不可訪問的。

2。和公有成員類似,受保護的成員對於派生類的成員和友元來說是可訪問的。

3。派生類的成員或友元只能通過派生類物件來訪問基類的受保護成員。派生類對於乙個基類物件中的受保護成員沒有任何訪問特權。

派生類的成員和友元只能訪問派生類物件中的基類部分的受保護成員;對於普通的基類物件中的成員不具有特殊的訪問許可權。

公有、私有和受保護繼承

某個類對其繼承而來的成員的訪問許可權受到兩個因素影響:一是在基類中該成員的訪問說明符,二是在派生類的派生列表中的訪問說明符。

派生訪問說明符對於派生類的成員(及友元)能否訪問其直接基類的成員沒有什麼影響。對於基類成員的訪問許可權只與基類中的訪問說明符有關。

派生訪問說明符的目的是控制派生類使用者(包括派生類的派生類)對於基類成員的訪問許可權。

派生類向基類轉換的可訪問性

派生類向基類的轉換是否可訪問由使用該轉換的**決定,同時派生類的派生訪問說明符也會有影響。假定d繼承自b:

1。只有當d公有地繼承b時,使用者**才能使用派生類向基類的轉換;如果d繼承b的方式是受保護的或者私有的,則使用者**不能使該轉換。

2。不論d以什麼方式繼承b,d的成員函式和友元都能使用派生類向基類的轉換;派生類向其直接基類的型別轉換對於派生類的成員和友元來說永遠是可訪問的。

3。如果d繼承b的方式是公有的或者受保護的,則d的派生類的成員和友元可以使用d向b的型別轉換;反之,如果d繼承b的方式是私有的,則不能使用。

友元與繼承

就像友元關係不以傳遞一樣,友元關係同樣也不能繼承。基類的友元在訪問派生類成員時不具有特殊性,類似的,派生類的友元也不能隨意訪問基類的成員。

改變個別成員的或訪問性

有時我們需要改變派生類繼承的某個名字的訪問級別,通過使用using宣告可以達到這一目的。

通過在類的內部使用using宣告語句,我們可以將該類的直接或間接基類中的任何可訪問成員(例如,非私有成員)標記出來。using宣告語句中名字的訪問許可權由該using宣告語句之前的訪問說明符來決定。

派生類只能為那些它可以訪問的名字提供using宣告。

預設的繼承保護級別

預設派生運算子也由定義派生類所用的關鍵字來決定。預設情況下,使用class關鍵字定義的派生類的私有繼承的;而使用struct關鍵字定義的派生類是公有繼承的。

訪問控制與繼承

繼承控制中 派生類成員對父類成員的訪問 父類public成員 父類protected成員 父類private成員 公有繼承 保護繼承 私有繼承 繼承控制中 派生類使用者對父類成員對的可訪問性 父類public成員 父類protected成員 父類private成員 公有繼承 保護繼承 私有繼承 備註...

C 繼承與訪問控制

直接上 訪問控制與繼承 class base void memfcn base b protected int protmem private char privmem class pubderv public base 正確,派生類能訪問基類 protected 成員 char g 錯誤,派生類不...

C 之 訪問控制與訪問控制的繼承

private 本類函式和友元函式可以訪問。protected 本類函式 友元函式和子類函式可以訪問。public 本類函式 友元函式 子類函式和本類的物件可以訪問。和公有繼承 保護繼承和私有繼承沒有關係,保護繼承和私有繼承影響的是子類的繼承關係。類繼承中的訪問控制 公有繼承 public 保護繼承...