C 類的公有繼承,基類的私有成員在派生類中不可見或不可訪問

2021-08-04 21:37:43 字數 2012 閱讀 3478

1樓:3月21日晴

在c++語言中,一個派生類可以從一個基類派生,也可以從多個基類派生。從一個基類派生的繼承稱為單繼承;從多個基類派生的繼承稱為多繼承。

方式如下:

公有繼承(public)、私有繼承(private)、保護繼承(protected)是常用的三種繼承方式。

1. 公有繼承(public)

公有繼承的特點是基類的公有成員和保護成員作為派生類的成員時,它們都保持原有的狀態,而基類的私有成員仍然是私有的,不能被這個派生類的子類所訪問。

2. 私有繼承(private)

私有繼承的特點是基類的公有成員和保護成員都作為派生類的私有成員,並且不能被這個派生類的子類所訪問。

3. 保護繼承(protected)

保護繼承的特點是基類的所有公有成員和保護成員都成為派生類的保護成員,並且只能被它的派生類成員函式或友元訪問,基類的私有成員仍然是私有的。

2樓:匿名使用者

公有繼承:

當類的繼承方式為公有繼承時,基類的公有成員和保護成員的訪問屬性在派生類中不變,而基類的私有成員不可直接訪問。也就是說基類的公有成員和保護成員被繼承到派生類中訪問屬性不變,仍作為派生類的公有成員和保護成員,派生類的其他成員可以直接訪問它們。在類族之外只能通過派生類的物件訪問從基類繼承的公有成員。

私有繼承:

當類的繼承方式為私有繼承時,基類中的公有成員和保護成員都以私有成員的身份出現在派生類中,而基類的私有成員在派生類中不可直接訪問。也就是說基類的公有成員和保護成員被繼承後作為派生類的私有成員,派生類的其他成員可以直接訪問它們,但是在類族外部通過派生類的物件無法直接訪問它們。無論是派生類的 成員還是通過派生類的物件,都無法直接訪問從基類繼承的私有成員。

保護繼承:

保護繼承中,基類的公有成員和保護成員都以保護成員的身份出現在派生類中,而基類的私有成員變數不可直接訪問。這樣,派生類的其他成員就可以直接訪問從基類繼承來的公有和保護成員,但在類的外部通過派生類的物件無法直接訪問它們,無論是派生類的成員還是派生類的物件都無法直接訪問基類的私有成員。

公有繼承:保持原狀

許可權:(1)派生類成員只能訪問基類中的 public/protected 成員;

(2)派生類的物件只能訪問基類中的public成員。(注意:派生類和派生類物件是不同的)

私有繼承:均變私有

許可權:(1)派生類成員也只能訪問基類中的 public/protected 成員;

(2)派生類的物件不能訪問基類中的任何的成員。

保護繼承:公有、保護變保護

許可權:(1)派生類的成員只能訪問基類中的 public/protected 成員;

(2)派生類的物件不能訪問基類中的任何的成員。

共性:1、私有最終都是私有,且不可訪問的;

2、這就像一個許可權大小包含、約束關係,仔細體會;

3、物件只有公有繼承,可以訪問 public 成員,其餘的都是不能訪問的;

4、三種繼承,成員訪問都是一樣的,因為相當於基類成員被已相應的許可權規則被copy到子類;

5、上面說的成員可以是:

(1)成員函式

(2)成員變數

請問在c++中基類的公有成員能不能訪問派生類的私有成員????

3樓:匿名使用者

應該是不能訪問到的,語法上不成立

4樓:匿名使用者

當然不能,父類被子類繼承,父類並不知道哪些類繼承了他,但是子類可以訪問父類的

專public、protected 成員,當然如果屬父類的public、protected 虛擬函式,在子類中覆蓋(override),可以用父類指標呼叫子類函式,因為覆蓋實際上是用子類的函式地址(指標)動態替換了父類函式地址,所謂多型。

下面是偽**

//父類

class a

};//子類

class b:a

};main()

5樓:郯北鮮于悅宜

不能基類的私有成員在派生程序中仍然是基類的私有成員,不能為派生類所援用

派生類可以呼叫基類的私有成員嗎,派生類能否直接訪問基類的私有成員若不能,應如何實現

派生類不bai能對基類 私du有成員進行訪問。要在派生類zhi 中對基dao類成員回進行訪問,可以 1,在答派生類中對基類成員的public屬性進行訪問,以間接訪問基類的私有成員 2,在基類中將私有成員定義為protected訪問屬性,以在派生類中直接對其進行訪問。當位於類成員列表之前時,priva...

c定義虛基類Shape,在Shape類的基礎上

include using namespace std class shape void shape createshape class rectangle virtual public shape rectangle rectangle float a,float b float rectangl...

在C 中,我的問題關於 基類有同名成員引起的二義性這個知識點

我來試著回答一下,大家看看是不是這樣 1.原本語句列印 在a1中 這個應該不用解釋,這個時候只有a1中存在print方法。2.增加a2 print 函式後,由於a2繼承a1所以a2 print 函式覆蓋 overwritten a1 print 函式,所以這種情況下,對於a2及a2的所有子類的例項來...