1. 程式人生 > >C++ 繼承公有、私有、保護

C++ 繼承公有、私有、保護

轉自:http://www.cnblogs.com/qlwy/archive/2011/08/25/2153584.html


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


1. 公有繼承(public)


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


2. 私有繼承(private)


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


3. 保護繼承(protected)


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


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


         publicprotectedprivate
共有繼承public protected不可見
私有繼承private private不可見
保護繼承protectedprotected不可見
在上圖中: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  //基類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++ 多繼承 公有私有保護

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

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

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

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

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

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

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

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

C++繼承公有私有保護

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

C++繼承公有私有保護

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

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

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

23.C++- 繼承的多種方式顯示調用父類構造函數父子之間的同名函數virtual虛函數

vat 子類 name png 才會 項目 作用域 static 創建子類 在C++中,繼承方式共有3種: public繼承 -指父類的成員(變量和函數)訪問級別,在子類中保持不變 private繼承 -指父類的成員,在子類中變為private私有成員. -也就是說子

C++繼承與建構函式複製控制

        每個派生類物件由派生類中定義的(非static)成員加上一個或多個基類子物件構成,因此,當構造、複製、賦值和撤銷派生型別物件時,也會構造、複製、賦值和撤銷這些基類子物件。 建構函式和複製控制成員不能繼承,每個類定義自己的建構函式和複製控制成員。像任何類一樣,

【程式語言】C++繼承和派生類虛基類

從已有的物件型別出發建立一種新的物件型別,使它部分或全部繼承原物件的特點和功能,這是面向物件設計方法中的基本特性之一。繼承不僅簡化了程式設計方法,顯著提高了軟體的重用性,而且還使得軟體更加容易維護。派生則是繼承的直接產物,它通過繼承已有的一個或多個類來產生一個新的類,通過派生

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

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

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

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

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

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

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

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

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

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

C++】解析共有繼承私有繼承保護繼承區別聯絡

C++繼承:公有,私有,保護 公有繼承(public)、私有繼承(private)、保護繼承(protected)是常用的三種繼承方式。 公有繼承(public) 公有繼承的特點是基類的公有成員和保護成員作為派生類的成員時,它們都保持原有的

C++ 程式碼重用 05-- 19.25-2.保護繼承 公有私有保護繼承的不同

#include <iostream> using namespace std; /*--------------------------------- 19.25-2.保護繼承 變化 |