1. 程式人生 > >公有、私有、保護 的定義和繼承

公有、私有、保護 的定義和繼承

C++,public、protected、private,簡短總結:

1、public:類內、類的物件;派生類內、派生類物件--->>均可訪問。

2、protected:類內、派生類內--->>可以訪問;類的物件、派生類的物件-->>不可訪問。

3、private:只有類內部-->>可以訪問;類的物件、派生類、派生類的物件,統統的-->>不可訪問。

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

1. 公有繼承(public)

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

2. 私有繼承(private)

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

3. 保護繼承(protected)

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

下面列出三種不同的繼承方式的基類特性和派生類特性。

public protected private
共有繼承 public protected 不可見
私有繼承 private private 不可見
保護繼承 protected protected 不可見

在上圖中:1)基類成員對派生類都是:共有和保護的成員是可見的,私有的的成員是不可見的。

                   2)基類成員對派生類的物件來說:要看基類的成員在派生類中變成了什麼型別的成員。如:私有繼承時,基類的共有成員和私有成員都變成了派生類中的私有成員,因此對於派生類中的物件來說基類的共有成員和私有成員就是不可見的。

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

對於公有繼承方式

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

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

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

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

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

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

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

對於私有繼承方式

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

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

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

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

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

所有成員都是不可見的。

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

對於保護繼承方式

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

上述所說的可見性也就是可訪問性。

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

看看這樣的例子

#include<iostream>

using namespace std;

//////////////////////////////////////////////////////////////////////////

class A       //父類

{

private:

int privatedateA;

protected:

int protecteddateA;

public:

int publicdateA;

};

//////////////////////////////////////////////////////////////////////////

class B :public A      //基類A的派生類B(共有繼承)

{

public:

void funct()

{

int b;

b=privatedateA;   //error:基類中私有成員在派生類中是不可見的

b=protecteddateA; //ok:基類的保護成員在派生類中為保護成員

b=publicdateA;    //ok:基類的公共成員在派生類中為公共成員

}

};

//////////////////////////////////////////////////////////////////////////

class C :private //基類A的派生類C(私有繼承)

{

public:

void funct()

{

int c;

c=privatedateA;    //error:基類中私有成員在派生類中是不可見的

c=protecteddateA;  //ok:基類的保護成員在派生類中為私有成員

c=publicdateA;     //ok:基類的公共成員在派生類中為私有成員

}

};

//////////////////////////////////////////////////////////////////////////

class D :protected A   //基類A的派生類D(保護繼承)

{

public:

void funct()

{

int d;

d=privatedateA;   //error:基類中私有成員在派生類中是不可見的

d=protecteddateA; //ok:基類的保護成員在派生類中為保護成員

d=publicdateA;    //ok:基類的公共成員在派生類中為保護成員

}

};

//////////////////////////////////////////////////////////////////////////

int main()

{

int a;

B objB;

a=objB.privatedateA;   //error:基類中私有成員在派生類中是不可見的,對物件不可見

a=objB.protecteddateA; //error:基類的保護成員在派生類中為保護成員,對物件不可見

a=objB.publicdateA;    //ok:基類的公共成員在派生類中為公共成員,對物件可見

C objC;

a=objC.privatedateA;   //error:基類中私有成員在派生類中是不可見的,對物件不可見

a=objC.protecteddateA; //error:基類的保護成員在派生類中為私有成員,對物件不可見

a=objC.publicdateA;    //error:基類的公共成員在派生類中為私有成員,對物件不可見

D objD;

a=objD.privatedateA;   //error:基類中私有成員在派生類中是不可見的,對物件不可見

a=objD.protecteddateA; //error:基類的保護成員在派生類中為保護成員,對物件不可見

a=objD.publicdateA;    //error:基類的公共成員在派生類中為保護成員,對物件不可見

return 0;

}

相關推薦

公有私有保護定義繼承

C++,public、protected、private,簡短總結: 1、public:類內、類的物件;派生類內、派生類物件--->>均可訪問。 2、protected:類內、派生類內--->>可以訪問;類的物件、派生類的物件-->>不

C++中繼承派生詳解(公有私有保護繼承的區別)

繼承和派生概述: 繼承和派生是同一個過程從不同角的度看 保持已有類的特性而構造新類的過程稱為繼承。 在已有類的基礎上新增自己的特性而產生新類的過程稱為派生。 被繼承的已有類稱為基類(或父類)。 派生出的新類稱為派生類(

C++繼承型別:公有保護私有虛擬

公有繼承(public)、保護繼承(protected)、私有繼承(private)是常用的三種繼承方式,除了這些繼承型別外還有一種虛擬繼承。 公有繼承(public) 公有繼承的特點是基類的公有成員和保護成員作為派生類的成員時,它們都保持原有的狀態,即基類的公有成員在派生類中還是公有

C++ 繼承公有私有保護

轉自:http://www.cnblogs.com/qlwy/archive/2011/08/25/2153584.html 公有繼承(public)、私有繼承(private)、保護繼承(protected)是常用的三種繼承方式。 1. 公有繼承(public) 公有繼承

C++ 繼承 3--私有派生下的子類訪問父類公有私有保護成員

#include <iostream> using namespace std; /*--------------------------------- 10私有派生 ---------------------------------*/ class

C++繼承公有私有保護(轉)

情況 pre mes 派生類 它的 保持 ++ col ble 公有繼承(public)、私有繼承(private)、保護繼承(protected)是常用的三種繼承方式。 1. 公有繼承(public) 公有繼承的特點是基類的公有成員和保護成員作為派生類的成員時,它們都保持

析構函數私有類方法;繼承;環境部署;多線程多進程;鎖

turn cme 網絡io 變量 配置 磁盤io 入參 屬性 tom 1.析構函數、私有、類方法、屬性方法、靜態方法class My: def __init__(self): print(‘構造函數,類在實例化的時候會自動執行他‘) def __d

c++ 多繼承 公有私有保護

  昨天學習三種繼承方式,有些比喻十分形象,特此分享。 首先說明幾個術語: 1.基類 基類比起它的繼承類是個更加抽象的概念,所描述的範圍更大。所以可以看到有些抽象類,他們設計出來就是作為基類所存在的(有些名字裡面有abstract的)。 基類也叫父類,雖然本人覺得這個比喻並不恰當。因為實際

Java一維陣列定義初始化二維陣列定義初始化傳參方式Arrays類

陣列 陣列是Java中的一種資料型別,是一組資料的集合,陣列中的每個成員稱為元素。Java中的陣列是類型別(引用型別),Java的同一個陣列中,只能存放相同型別的資料元素。 一維陣列 一維陣列的定義方式 一維陣列有以下兩種定義方式,推薦使用第一種定義方式 <資料型別

【小家java】類中靜態程式碼塊構造程式碼塊靜態變數執行順序繼承邏輯

相關閱讀 每篇一句 上帝給每個人都安排了幸福的一生,我們的任務就是把它走完 1、概述 誠如各位所知,java的三大特性:封裝、繼承、多型。其中繼承,是java中最有學問的一點也是最相對來說最難理解的一些東西,本文針對於此,做一些例項分析,希望能夠幫助大家

C++繼承公有私有保護

公有繼承(public)、私有繼承(private)、保護繼承(protected)是常用的三種繼承方式。 1. 公有繼承(public) 公有繼承的特點是基類的公有成員和保護成員作為派生類的成員時,它們都保持原有的狀態,而基類的私有成員仍然是私有的,不能被這個派生類

16python面對物件之類繼承

  前言:本文主要介紹python面對物件中的類和繼承,包括類方法、靜態方法、只讀屬性、繼承等。   一、類方法  1.類方法定義   使用裝飾器@classmethod裝飾,且第一個引數必須是當前類物件,該引數名一般約定為“cls",通過它來傳遞類的屬性和方法 (不能傳遞例項

JS高級之簡單類的定義繼承

googl 實例方法 program 方法 ram ctype write utf-8 ole <!DOCTYPE html> <html> <head> <meta charset="UTF-

C語言拾遺:公有私有保護繼承--《C++ primer》筆記

公有繼承:派生類物件可訪問基類中的公有成員,派生類成員可訪問基類中的公有成員與保護成員。私有繼承:對於派生類物件不可該問基類任何成員。派生類成員可該問基類公有與保護成員。所有基類公有與保護成員變成派生類私有成員,且不可為派生類的子類訪問。基類私有成員對派生類不可見。保護繼

公有私有保護繼承--《C++ primer》筆記

protectedInheritance.cpp 間接繼承和書本描述不一致,書上說因為第一重繼承變private,第二重繼承才無法訪問Base::i~是private,現實是提示Base::i是protected,好像跳過Private_derived類直接找基類了。 繼

C++中類的三種繼承方式public(公有繼承protected(保護繼承private(私有繼承)之間的差別(附思維導圖)【轉】

(轉自:https://blog.csdn.net/coco56/article/details/80467975) 注:若不指明繼承方式,則預設是私有繼承。 一:對於公有繼承(public)方式: 基類的public和protected成員的訪問屬性在派生類中保持不變,但基類的p

C++ 公有繼承保護繼承私有繼承的區別

1)基類成員對派生類的可見性 1. 公有繼承(public) :基類的公有成員和保護成員作為派生類的成員時,它們都保持原有的狀態,而基類的私有成員仍然是私有的,不能被這個派生類的子類所訪問。 2. 私有繼承(private) :基類的公有成員和保護成員都作為派生類的私有

C++之共有繼承保護繼承私有繼承

nbsp inf ima int void 不能 stream cout turn 1.封裝,public,private作用就是這個目的。   類外只能訪問public成員而不能方位private成員;   private成員只能被類成員和友元訪問; 2.繼承,prote

雲端計算的“雲”,除了公有私有混合雲,雲端計算還有這些細分領域

雲端計算的“雲”,源於繪製網際網路圖表時的一個習慣——將其畫成一朵雲。最受認同的關於雲端計算含義的解釋是,在一個商業供應者的資料中心上通過網際網路遠端執行工作負載——也就是所謂的“公有云”模式。AWS、Azure、谷歌雲等平臺都是這一雲端計算概念的例證。 但是,雲端計算還有一個更精確的解釋:資料中心資源的虛

使用公共私有保護等訪問指示符的java概述

5.2 Java訪問指示符 針對類內每個成員的每個定義,Java訪問指示符poublic,protected以及private都置於它們的最前面——無論它們是一個數據成員,還是一個方法。每個訪問指示符都只控制著對那個特定定義的訪問。這與C++存在著顯著不同。在