C++中的繼承 三種繼承方式

1.繼承與派生

繼承是使代碼可以複用的重要手段,也是面向對象程序設計的核心思想之一。簡單地說,繼承是指一個對象直接使用另一個對象的屬性和方法。繼承呈現了面向對象設計的層次結構,體現可由簡單到複雜的認知過程。C++中的繼承關係可以類比於父子關係,繼承一筆財產比白手起家容易得多,原始類稱爲基類(父類),繼承類稱爲派生類(子類),派生類也可被當做基類,被其他派生類再繼承。
繼承的方式有三種,分別是私有繼承(private),公有繼承(public),保護繼承(protect);定義格式如下:

class DeriveClassName:acess-label BassClassName{}
//類定         派生類名 :繼承方式           基類名{}          
//                      ↓
//            public.protected.private

2.繼承方式及訪問屬性

(1)公有繼承(public)
特點:繼承時保持基類中各成員屬性不變,並且基類中private成員被隱藏。派生類的成員只能訪問基類中的public/protected成員,而不能訪問private成員;派生類的對象只能訪問基類中的public成員。
(2)私有繼承(private)
特點:繼承時基類中各成員屬性均變爲private,並且基類中private成員被隱藏。派生類的成員也只能訪問基類中的public/protected成員,而不能訪問private成員;派生類的對象不能訪問基類中的任何的成員。
(3)保護繼承(protected)
特點:繼承時基類中各成員屬性均變爲protected,並且基類中private成員被隱藏。派生類的成員只能訪問基類中的public/protected成員,而不能訪問private成員;派生類的對象不能訪問基類中的任何的成員。
轉自小鹹魚_的博客。

#include<iostream>  
using namespace std; 
 
class A 
{ 
private: 
    int privatetedateA;
protected:  
    int protecteddateA; 
public:
    int publicdateA;
};
  
class B :public A      
{  
public:  
    void funct()  
    {  
        int b;  
        b=privatedateA;   //error:基類中私有成員在派生類中是不可見的  
        b=protecteddateA; //true:基類的保護成員在派生類中爲保護成員  
        b=publicdateA;    //true:基類的公共成員在派生類中爲公共成員  
    }  
};  
/  
class C :private A  
{  
public:  
    void funct()  
    {  
        int c;  
        c=privatedateA;    //error:基類中私有成員在派生類中是不可見的  
        c=protecteddateA;  //true:基類的保護成員在派生類中爲私有成員  
        c=publicdateA;     //true:基類的公共成員在派生類中爲私有成員  
    }  
};  
 
class D :protected A  
{  
public:  
    void funct()  
    {  
        int d;  
        d=privatedateA;   //error:基類中私有成員在派生類中是不可見的  
        d=protecteddateA; //true:基類的保護成員在派生類中爲保護成員  
        d=publicdateA;    //true:基類的公共成員在派生類中爲保護成員  
    }  
};  
 
int main()  
{  
    int a;   
   
    B objB;  
    a=objB.privatedateA;   //error:基類中私有s成員在派生類中是不可見的,對對象不可見  
    a=objB.protecteddateA; //error:基類的保護成員在派生類中爲保護成員,對對象不可見  
    a=objB.publicdateA;    //true:基類的公有成員在派生類中爲公共成員,對對象可見  
   
    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;  
}  

源碼轉自 Joerrot的博客。

3.私有繼承和保護繼承

區別:
私有繼承的類中 只有派生類可以繼承 派生類的子類不可以繼承。
保護繼承的類中 派生類的成員函數和友元函數均可以向下繼承。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章