繼承與派生
如果頭一次聽到這個名字的話,就先要想想這兩個詞的意思了。先來說繼承,這與現(xiàn)實生活中的繼承意思差不多,比如一個人繼承另一個人的財產(chǎn)、以及子承父業(yè)等等是一個意思,擁有的這個過程就叫做繼承。同樣,在C++中,比如有兩個類,新類擁有原有類的全部屬性叫做繼承!原有類產(chǎn)生新類的過程叫做派生!而我們把原有的這個類稱之為父類或基類,由基類派生出的類叫做派生類或者叫做子類。大家從名字上就可以看出他們的關(guān)系。
那么繼承和派生有什么好處呢?為什么C++要有這種機(jī)制呢?
1. 體現(xiàn)面向?qū)ο蟮木幊趟枷?,更好的表達(dá)各類型之間的關(guān)系。
2. 派生類除了可以繼承基類的全部信息外,還可以添加自己的那些不同的、有差異的信息,就像生物進(jìn)化的道理一樣,派生類在擁有基類的全部基礎(chǔ)之上還將更強(qiáng)大。
3. 派生類繼承到基類的成員是自動、隱藏的擁有,即不需要我們重新定義,這就節(jié)省了大量的代碼,體現(xiàn)了代碼重用的軟件工程思想。
下面,我們來看實際代碼的實現(xiàn),如何繼承,實現(xiàn)派生類:
/************************************** //Des:C++教程demo //Author:Huang //Copyright:www.sztianhecheng.cn //Date:2018/6/20 **************************************/ #include<iostream> using namespace std; class Clock { private: int H; int M; int S; public: int SetTime(int h,int m,int s) { this->H = h; this->M = m; this->S = s; return 0; } int ShowTime() { cout<<"Now:"<<H<<":"<<M<<":"<<S<<endl; return 0; } }; class AlarmClock:public Clock { private: int AH; int AM; public: int SetAlarm(int AH,int AM) { this->AH = AH; this->AM = AM; return 0; } int ShowAlarm() { cout<<"AlarmTime:"<<AH<<":"<<AM<<endl; return 0; } }; int main() { AlarmClock A; A.SetTime(19,15,50); A.ShowTime(); A.SetAlarm(5,30); A.ShowAlarm(); return 0; }
運(yùn)行截圖如下:
請大家閱讀代碼理解,其中Clock為基類,AlarmClock為派生類,注意定義派生類的語句:
class AlarmClock:public Clock
通過冒號表示繼承,其中public表示公有繼承、私有繼承和保護(hù)繼承,我們會在后面慢慢展開。代碼中,我們在主函數(shù)里定義了AlarmClock這個派生類的對象A,然后可以調(diào)用來自基類的SetTime和ShowTime方法,使用起來自己的一樣。同時,我們又在派生類中增加定義了自己的SetAlarm和ShowAlarm方法。請大家理解代碼并上機(jī)實驗。
至此,我們介紹了繼承和派生的基本概念,大家要理解之后上機(jī)敲代碼實驗,體會在何種情況下兩個有共性、有關(guān)聯(lián)的類可以存在這種關(guān)系,權(quán)衡使用。
C語言網(wǎng)提供由在職研發(fā)工程師或ACM藍(lán)橋杯競賽優(yōu)秀選手錄制的視頻教程,并配有習(xí)題和答疑,點擊了解:
一點編程也不會寫的:零基礎(chǔ)C語言學(xué)練課程
解決困擾你多年的C語言疑難雜癥特性的C語言進(jìn)階課程
從零到寫出一個爬蟲的Python編程課程
只會語法寫不出代碼?手把手帶你寫100個編程真題的編程百練課程
信息學(xué)奧賽或C++選手的 必學(xué)C++課程
藍(lán)橋杯ACM、信息學(xué)奧賽的必學(xué)課程:算法競賽課入門課程
手把手講解近五年真題的藍(lán)橋杯輔導(dǎo)課程