国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

詳解C++編程中的私有繼承和公有繼承

2020-01-26 14:51:32
字體:
供稿:網(wǎng)友

C++類的私有繼承
在聲明一個派生類時將基類的繼承方式指定為private的,稱為私有繼承,用私有繼承方式建立的派生類稱為私有派生類(private derived class ), 其基類稱為私有基類(private base class )。

私有基類的公用成員和保護成員在派生類中的訪問屬性相當(dāng)于派生類中的私有成員,即派生類的成員函數(shù)能訪問它們,而在派生類外不能訪問它們。私有基類的私有成員在派生類中成為不可訪問的成員,只有基類的成員函數(shù)可以引用它們。一個基類成員在基類中的訪問屬性和在派生類中的訪問屬性可能是不同的。私有基類的成員在私有派生類中的訪問屬性見下表。

上表不必死記硬背,只需理解:既然聲明為私有繼承,就表示將原來能被外界引用的成員隱藏起來,不讓外界引用,因此私有基類的公用成員和保護成員理所當(dāng)然地成為派生類中的私有成員。

私有基類的私有成員按規(guī)定只能被基類的成員函數(shù)引用,在基類外當(dāng)然不能訪問他們,因此它們在派生類中是隱蔽的,不可訪問的。

對于不需要再往下繼承的類的功能可以用私有繼承方式把它隱蔽起來,這樣,下一層的派生類無法訪問它的任何成員。可以知道,一個成員在不同的派生層次中的訪問屬性可能是不同的,它與繼承方式有關(guān)。

[例]

class Student1: private Student//用私有繼承方式聲明派生類Student1{public:  void display_1( ) //輸出兩個數(shù)據(jù)成員的值  {   cout<<"age: "<<age<<endl; //引用派生類的私有成員,正確   cout<<"address: "<<addr<<endl;  } //引用派生類的私有成員,正確private:  int age;  string addr;};

請分析下面的主函數(shù):

int main( ){  Student1 stud1;//定義一個Student1類的對象stud1  stud1.display(); //錯誤,私有基類的公用成員函數(shù)在派生類中是私有函數(shù)  stud1.display_1( );//正確,Display_1函數(shù)是Student1類的公用函數(shù)  stud1.age=18; //錯誤,外界不能引用派生類的私有成員  return 0;}

可以看到:
不能通過派生類對象(如stud1)引用從私有基類繼承過來的任何成員(如stud1.display()或stud1.num)。
派生類的成員函數(shù)不能訪問私有基類的私有成員,但可以訪問私有基類的公用成員(如stud1.display_1函數(shù)可以調(diào)用基類的公用成員函數(shù)display,但不能引用基類的私有成員num)。

不少讀者提出這樣一個問

主站蜘蛛池模板: 蓬溪县| 福州市| 五大连池市| 五原县| 瓦房店市| 玉田县| 连州市| 梅河口市| 禹州市| 平昌县| 江西省| 吐鲁番市| 四平市| 金平| 鹤庆县| 汝州市| 新民市| 塔河县| 汤原县| 合江县| 乐亭县| 陵川县| 西昌市| 车致| 郑州市| 金堂县| 色达县| 九龙城区| 绥化市| 洮南市| 西贡区| 同心县| 德江县| 兰溪市| 博湖县| 金湖县| 霸州市| 宝丰县| 集贤县| 星子县| 徐水县|