繼承與派生
如果頭一次聽到這個名字的話,就先要想想這兩個字的意思了。先來說繼承,這跟現實生活中的繼承意思差不多,例如一個人繼承另一個人的財產、以及子承父業等等是一個意思,擁有的這個過程就叫做繼承。同樣,在C++中,例如有兩個類,新類別擁有原有類別的全部屬性叫做繼承!原有類別產生新類別的過程叫做派生!而我們把原有的這個類別稱之為父類別或基底類,由基底類別衍生出的類別叫做派生類別或叫做子類別。大家從名字就可以看出他們的關係。
那麼繼承和派生有什麼好處呢?為什麼C++要有這種機制呢?
1. 體現物件導向的程式設計思想,更好的表達各類型之間的關係。
2. 派生類別除了可以繼承基類的全部信息外,還可以添加自己的那些不同的、有差異的信息,就像生物進化的道理一樣,派生類在擁有基類的全部基礎之上還將更強大。
3. 衍生類別繼承到基底類別的成員是自動、隱藏的擁有,也就是不需要我們重新定義,這就節省了大量的程式碼,體現了程式碼重用的軟體工程想法。
下面,我們來看實際程式碼的實現,如何繼承,實作衍生類別:
/**************************************//Des:C++教學demo//Author: Huang//Copyright:www.dotcpp.com//Date:2018/6/20******************************* *******/#incl ude<iostream>usingnamespacestd;classClock{private:intH;intM;intS;public:intSetTime(inth,intm,ints){this->H=h;this->M=m;this->S=s;return0; }intShowTime(){co ut<<Now:<<H<<:<<M<<:<<S<<endl;return0;}};classAlarmClock:publicClock{private:intAH;intAM;public:intSetAlarm(intAH,intAM){this- >AH=AH;this->AM=AM;return0;} intShowAlarm(){cout<<AlarmTime:<<AH<<:<<AM<<endl;return0;}};intmain(){AlarmClockA;A.SetTime(19,15,50);A.ShowTime(); A.SetAlarm(5,30);A.ShowAlarm();return0;}
運行截圖如下:
請大家閱讀程式碼理解,其中Clock為基底類,AlarmClock為派生類,注意定義派生類別的語句:
classAlarmClock:publicClock
透過冒號表示繼承,其中public表示公有繼承、私有繼承和保護繼承,我們會在後面慢慢展開。程式碼中,我們在主函數裡定義了AlarmClock這個衍生類別的物件A,然後可以呼叫來自基底類別的SetTime和ShowTime方法,使用起來自己的一樣。同時,我們又在衍生類別中增加定義了自己的SetAlarm和ShowAlarm方法。請大家理解程式碼並上機實驗。
至此,我們介紹了繼承和派生的基本概念,大家要理解之後上機敲代碼實驗,體會在何種情況下兩個有共性、有關聯的類別可以存在這種關係,權衡使用。