1. 程式人生 > >類的訪問控制和繼承

類的訪問控制和繼承

在C++中,我們使用訪問說明符加強類的封裝性。

訪問說明符有:public、private、protected

1)定義在public說明符之後的成員在整個程式內可以被訪問,public成員定義類的介面。

2)定義在private說明符之後的成員可以只能由類的介面訪問,private部分封裝了(隱藏了)類的實現細節。

3)由於我們定義的類希望某些成員可以在類的繼承過程中和派生類分享,而不被其他公共部分訪問,因此便設定protected說明符。定義在protected訪問符之後的成員,常用於派生類和友元。

什麼是友元?

友元分友元函式和友元類。類與類之間要進行某些相關操作,就要用到友元!有時需要定義一些函式,這些函式不是類的一部分,但又需要頻繁地訪問類的資料成員,這時可以將這些函式定義為該函式的友元函式。除了友元函式外,還有友元類,兩者統稱為友元。 友元能夠使得普通函式直接訪問類的保護資料,避免了類成員函式的頻繁呼叫,可以節約處理器開銷,提高程式的效率,但所矛盾的是,即使是最大限度大保護,同樣也破壞了類的封裝特性,這即是友元的缺點。

使用友元類時注意: (1) 友元關係不能被繼承。  (2) 友元關係是單向的,不具有交換性。若類B是類A的友元,類A不一定是類B的友元,要看在類中是否有相應的宣告。 (3) 友元關係不具有傳遞性。若類B是類A的友元,類C是B的友元,類C不一定是類A的友元,同樣要看類中是否有相應的申明

其實在C++中,struct和class的差別也在於此!class可以看成是struct的加強版

struct的預設訪問說明符是public,預設public繼承;class的預設訪問說明符是private,預設private繼承

在繼承機制中,有派生訪問說明符。分為:public、private、protected

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

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