當我們要做出兩個很類似的class時,可以讓第二個class承繼一些原本class的參數與設定,不用再重複打一次,一樣是省時間省眼睛的懶人福音。
為了簡單稱呼,把第一個、原型叫做Super class,第二個叫做Sub class。
比方說:電腦class,下面有桌機class、筆電class。電腦就是Super class,筆電跟桌機叫做Sub class。
或是用擬人化稱呼,阿公、媽媽、小孩
先來複習一下之前提到class有三個區域:
- private: 私人區域,只有該class可以取用
- protected: 保護只有繼承可以取用
- public: 完全公開,哪裡都可以取用
繼承也有三種模式:
私人模式、保護模式、公開模式。
這邊使用外公生媽媽,媽媽生小孩來做舉例。
注意:private區域的東西是只能在class內取用,因此繼承時也不能繼承到
以下示範外公生下lapto媽媽,然後。
class Computer{
.....
};
class Laptop: public Computer{
......
};
以下示範
注:MBP的後代,曾孫就會變成“全部都是private",因為MBP是private。
class Computer{
.....
};
class Laptop: public Computer{
......
};
class MBP: private Laptop{
......
};
除了上面舉例直系的繼承(小孩媽媽的爸爸是外公,這樣就是直系),也可以繼承雙親的基因,例如同時繼承爸爸Computer跟媽媽Apple的數值,如以下範例:
class Computer{
......
};
class Apple{
......
};
class MBP: public Computer, public Apple{
......
};
有趣的來了,除了以上示範,還能生很多不同的個class變成家庭樹/親戚樹。
如以下Computer和Apple有MBP、Air、iMac三個sub class。
class Computer{
......
};
class Apple{
......
};
class MBP: public Computer, public Apple{
......
};
class air: public Computer, public Apple{
......
};
class iMac:public Computer, public Apple{
......
};
有個重點要很小心,如以下範例,在MBP繼承了Apple & Computer,然後藉由父母繼承 Tool的時候,MBP是同時繼承兩個 - Computer和Apple,這樣MBP就會繼承到同時兩個tool! 電腦會不知道該怎麼辦會出現錯誤喔。
class Tool{
......
};
class Computer: public Tool{
......
};
class Apple: public Tool{
......
};
class MBP: public Computer, public Apple{
......
};
用virtual
class Tool{
......
};
class Computer: virtuel public Tool{
......
};
class Apple: virtuel public Tool{
......
};
class MBP: public Computer, public Apple{
......
};
這樣就可以解決兩個tool的問題,這樣就只會有一個tool喔!
關於如何應用請參考下一篇~
Reference: Geeksforgeeks, tutorialspoint, cplusplus, w3school