程式碼重用是提高軟體開發效率的重要手段,因此 C++ 對程式碼重用有很強的支援,“繼承”就是支援程式碼重用的機制之一。
假設教育局要編寫一個學籍管理程式,推廣到全國的大中小學使用。如果用物件導向的方法開發,必然要設計一個“學生”類。“學生”類包含所有學生的共同屬性和方法,如姓名、學號、性別、成績等屬性,判斷是否該退學、是否該獎勵或處罰等方法。而中學生、本科生、研究生又有各自不同的屬性和方法,如本科生和研究生有專業的屬性,而中學生沒有;研究生有導師的屬性;中學生有競賽、特長加分等屬性,而本科生和研究生沒有。
如果為每種學生都編寫一個類,顯然會有不少重複的程式碼,造成效率上的浪費。C++ 的“繼承”機制就能避免上述浪費。
基本概念
在 C++ 中,當定義一個新的類 B 時,如果發現類 B 擁有某個已寫好的類 A 的全部特點,此外還有類 A 沒有的特點,那麼就不必從頭重寫類 B,而是可以把類 A 作為一個“基礎類別”(也稱“父類別”),把類 B 寫為基礎類別 A 的一個“派生類”(也稱“子類”)。這樣,就可以說從類 A “派生”出了類 B,也可以說類 B “繼承”了類 A。
派生類是通過對基礎類別進行擴充和修改得到的。基礎類別的所有成員自動成為派生類的成員。
所謂擴充,指的是在派生類中可以新增新的成員變數和成員函數;所謂修改,指的是在派生類中可以重寫從基礎類別繼承得到的成員。
派生類的成員函數不能存取基礎類別的私有成員。
有了 “繼承”機制,對於上述學籍管理程式,就可以編寫一個“學生”類概括各種學生的共同特點,然後從“學生”類派生出“小學生”類、“中學生”類、“本科生類”等,如圖 1 所示。
:
圖1:學籍管理系統的類設計