c 中的訪問屬性,和繼承方式,一些問題的總結

2021-07-29 10:39:36 字數 2632 閱讀 2473

第一:private, public, protected 訪問標號的訪問範圍。

private:只能由1.該類中的函式、2.其友元函式訪問。

不能被任何其他訪問,該類的物件也不能訪問。

protected:可以被1.該類中的函式、2.子類的函式、以及3.其友元函式訪問。

但不能被該類的物件訪問。

public:可以被1.該類中的函式、2.子類的函式、3.其友元函式訪問,也可以由4.該類的物件訪問。

注:友元函式包括3種:設為友元的普通的非成員函式;設為友元的其他類的成員函式;設為友元類中的所有成員函式。

第二:類的繼承後方法屬性變化。

private 屬性不能夠被繼承。

使用private繼承

,父類的protected和public屬性在子類中變為private;

使用protected繼

承,父類的protected和public屬性在子類中變為protected;

使用public繼承,父類中的protected和public屬性不發生改變;

如下所示:

public:            protected:       private:

public繼承            public              protected        不可用 

protected繼承       protected       protected        不可用 

private繼承            private           private             不可用

protected繼承和private繼承能降低訪問許可權。(也就是說如果採用protected或者private繼承方式,父類中處了private屬性外全部變成繼承方式的屬性)

為了進一步理解三種不同的繼續方式在其成員的可見性方面的區別,下面從三種不同角度進行討論。

對於公有繼續方式:

(1) 基類成員對其物件的可見性:

公有成員可見,其他不可見。這裡保護成員同於私有成員。

(2) 基類成員對派生類的可見性:

公有成員和保護成員可見,而私有成員不可見。這裡保護成員同於公有成員。

(3) 基類成員對派生類物件的可見性:

公有成員可見,其他成員不可見。

所以,在公有繼續時,派生類的物件可以訪問基類中的公有成員;派生類的成員函式可以訪問基類中的公有成員和保護成員。這裡,一定要區分清楚派生類的物件和派生類中的成員函式對基類的訪問是不同的。

對於私有繼續方式:

(1) 基類成員對其物件的可見性:

公有成員可見,其他成員不可見。

(2) 基類成員對派生類的可見性:

公有成員和保護成員是可見的,而私有成員是不可見的。

(3) 基類成員對派生類物件的可見性:

所有成員都是不可見的。

所以,在私有繼承時,基類的成員只能由直接派生類訪問,而無法再往下繼續。

對於保護繼續方式:

這種繼續方式與私有繼續方式的情況相同。兩者的區別僅在於對派生類的成員而言,對基類成員有不同的可見性。

上述所說的可見性也就是可訪問性。關於可訪問性還有另的一種說法。這種規則中,稱派生類的物件對基類訪問為水平訪問,稱派生類的派生類對基類的訪問為垂直訪問。

一般規則如下:

公有繼續時,水平訪問和垂直訪問對基類中的公有成員不受限制;

私有繼續時,水平訪問和垂直訪問對基類中的公有成員也不能訪問;

保護繼續時,對於垂直訪問同於公有繼續,對於水平訪問同於私有繼續。

對於基類中的私有成員,只能被基類中的成員函式和友元函式所訪問,不能被其他的函式訪問。

基類與派生類的關係

任何乙個類都可以派生出乙個新類,派生類也可以再派生出新類,因此,基類和派生類是相對而言的。

基類與派生類之間的關係可以有如下幾種描述:

1. 派生類是基類的具體化

類的層次通常反映了客觀世界中某種真實的模型。在這種情況下,不難看出:基類是對若干個派生類的抽象,而派生類是基類的具體化。基類抽取了它的派生類的公共特徵,而派生類通過增加行為將抽象類變為某種有用的型別。

2. 派生類是基類定義的延續

先定義乙個抽象基類,該基類中有些操作並未實現。然後定義非抽象的派生類,實現抽象基類中定義的操作。例如,虛函式就屬此類情況。這時,派生類是抽象的基類的實現,即可看成是基類定義的延續。這也是派生類的一種常用方法。

3. 派生類是基類的組合

在多繼續時,乙個派生類有多於乙個的基類,這時派生類將是所有基類行為的組合。

派生類將其本身與基類區別開來的方法是新增資料成員和成員函式。因此,繼續的機制將使得在建立新類時,只需說明新類與已有類的區別,從而大量原有的程式**都可以復用,所以有人稱類是「可復用的軟體構件」。

附加的一些技術資料:

我們知道c++中通過繼承方式的方法來管理相應資料或者方法的屬性,但是如果我們想在子類中已經繼承過來之後,想改變相應基類中的屬性應該怎麼做呢,我們知道c++的設計機制是,任何東西都不是絕對的,一定有相應的方法來實現相應的需求,這裡用到了spy技術,主要時應用using關鍵字

class a

;class spya : public a

;void testspy(a* pa)

由於這種技術用到了強制型別轉換,當謹慎使用。

c 類的訪問屬性以及繼承方式

對乙個類來說,在類中無論什麼型別的成員,都是可以直接訪問的 不考慮繼承 對於乙個類的物件來說,公有成員在物件可以直接訪問,而保護成員以及私有成員對於物件來說是不可見的,可以通過該類的各種方法來訪問。公有繼承 保護繼承 對於派生類來說,基類成員中的共有成員以及保護成員都變為派生類中的保護成員,派生類的...

C 繼承中的一些概念

物件導向程式設計也叫做 oop程式設計 物件導向程式設計就是 結構化程式設計,對 程式中的變數結構劃分,讓 程式設計更清晰。類實際上是 建立物件的模板,每個物件都包含資料,並提供了處理和訪問資料的方法。類定義了類的每個物件 稱為例項 可以包含什麼 資料和功能。類中的資料和函式稱為類的成員 資料成員 ...

c 中FileStream一些常用的屬性和和方法

對流進行操作時要引用 using system.io 命名空間 filestream常用的屬性和方法 屬性 canread 判斷當前流是否支援讀取,返回bool值,true表示可以讀取 canwrite 判斷當前流是否支援寫入,返回bool值,true表示可以寫入 方法 read 從流中讀取資料,返...