在編程入門系列上一講中雞啄米講了派生類從基類繼承的過(guò)程,其中提到了通過(guò)繼承方式可以控制對(duì)從基類繼承的成員的訪問(wèn)屬性,這一講主要講解公有繼承方式怎樣控制訪問(wèn)屬性。 前面說(shuō)過(guò),派生類從基類繼承時(shí)有三個(gè)步驟,第一個(gè)步驟是吸收基類成員,吸收了基類中除構(gòu)造函數(shù)和析構(gòu)函數(shù)之外的所有數(shù)據(jù)成員和函數(shù)成員,第二個(gè)步驟就是修改基類成員,包括修改對(duì)基類成員的訪問(wèn)屬性和覆蓋基類成員,第三個(gè)步驟是添加新成員。第二個(gè)步驟中修改對(duì)基類成員的訪問(wèn)屬性可以通過(guò)派生類的繼承方式控制。 類的成員有public(公有)、protected(保護(hù))和private(私有)三種訪問(wèn)屬性。類的繼承方式也有public(公有繼承)、protected(保護(hù)繼承)和private(私有繼承)三種。派生類通過(guò)不同的繼承方式可以獲得對(duì)基類成員的不同的訪問(wèn)屬性。派生類對(duì)基類成員的訪問(wèn)主要有兩種,一種是派生類的新增成員對(duì)繼承的基類成員的訪問(wèn),另一種是派生類的對(duì)象對(duì)繼承的基類成員的訪問(wèn)。下面會(huì)詳細(xì)講。 雞啄米這里插一句本應(yīng)屬于“類成員的訪問(wèn)控制”中的話,通過(guò)對(duì)象訪問(wèn)類的成員屬于外部訪問(wèn),只能訪問(wèn)類的公有成員。 派生類的繼承方式為public,即公有繼承時(shí),對(duì)基類中的公有成員和保護(hù)成員的訪問(wèn)屬性都不變,而對(duì)基類的私有成員則不能訪問(wèn)。具體說(shuō),就是基類的公有成員和保護(hù)成員被繼承到派生類中以后同樣成為派生類的公有成員和保護(hù)成員,派生類中新增成員對(duì)他們可以直接訪問(wèn),派生類的對(duì)象只能訪問(wèn)繼承的基類公有成員。但是派生類的新增成員和派生類的對(duì)象都不能訪問(wèn)基類的私有成員。 雞啄米給大家寫一個(gè)公有繼承的簡(jiǎn)單例子: #include<>iostream> 程序運(yùn)行結(jié)果是: The data of child: 上面的程序聲明了一個(gè)基類Base,又聲明了Base類的派生類Child,最后是主函數(shù)部分。派生類Child從基類Base中繼承了除構(gòu)造函數(shù)和析構(gòu)函數(shù)外的所有數(shù)據(jù)成員和函數(shù)成員,這些再加上派生類Child的新增成員就組成了Child類的全部。類Child的繼承方式為公有繼承,基類Base的所有公有成員在派生類Child中的訪問(wèn)屬性不變,都可以直接訪問(wèn),所以Child類的SetThree函數(shù)可以直接調(diào)用Base類的SetTwo函數(shù)。基類公有成員SetTwo、GetX和GetY都變成了Child類外部接口的一部分。但是上面說(shuō)過(guò),派生類不能訪問(wèn)基類的私有成員,所以Child類不能訪問(wèn)Base類的x和y。 主函數(shù)中首先定義了派生類Child的對(duì)象child,然后通過(guò)對(duì)象child調(diào)用了派生類Child的新增公有函數(shù)SetThree和GetZ,還調(diào)用了從基類Base繼承的公有成員函數(shù)GetX和GetY。 通過(guò)這個(gè)例子,派生類對(duì)基類成員的兩種訪問(wèn)方式:派生類的新增成員對(duì)繼承的基類成員的訪問(wèn)和通過(guò)派生類的對(duì)象對(duì)繼承的基類成員的訪問(wèn),都講到了。 因?yàn)檫@部分訪問(wèn)屬性控制的內(nèi)容比較重要而且需要慢慢理解,雞啄米后面再單獨(dú)講保護(hù)繼承和私有繼承,大家慢慢領(lǐng)會(huì)。有問(wèn)題歡迎到雞啄米博客留言討論。 |
|