阿瑟 發表
繼承 (inheritance) 讓你可以先一個類別中衍生出更多的類別, 不必再重複寫同樣的程式碼.
*注意: C++所有語法大小寫有差. 如果您在執行時發現中文無法顯示請自行將程式修改成英文.
#include <iostream.h> #include <stdlib.h> class car //通用的房車類別 { protected: int count_wheels; //紀錄這個物件有幾個輪子 (房車應該都是4個輪子吧) public: car(); // 這是初始函式, 會設定車子的輪子數量為4 }; class mercedes : car { private: int price; //價格 public: mercedes(); // 這是初始函式, 會設定這台賓士房車的價格與輪子數量 void output(); // 此函式會列出Mercedes房車的基本資料 }; class honda : car { private: int price; //價格 public: honda(); // 這是初始函式, 會設定這台Honda房車的價格與輪子數量 void output(); // 此函式會列出Honda房車的基本資料 }; car::car() { count_wheels = 4; } mercedes::mercedes() { price = 2000000; } void mercedes::output() { cout << "-------------------------" << endl; cout << "Mercedes高級房車 - 新款報價" << endl; cout << "-------------------------" << endl; cout << "輪子:" << count_wheels << endl; cout << "售價;" << price << "新台幣" << endl; cout << "-------------------------" << endl; } honda::honda() { price = 700000; } void honda::output() { cout << "-------------------------" << endl; cout << "Honda房車 - 新款報價" << endl; cout << "-------------------------" << endl; cout << "輪子:" << count_wheels << endl; cout << "售價;" << price << "新台幣" << endl; cout << "-------------------------" << endl; } void main() { honda car1; mercedes car2; car1.output(); car2.output(); system("PAUSE"); } |
Car類別本身是一個通用的類別, 代表的是一台基本的車子 (四顆輪子).
而 mercedes 和 honda 兩個類別會繼承car的成員 (例: class mercedes : car). 因此 mercedes 與 honda 兩個類別建造物件都是四個輪子的車子 (count_wheels = 4). 簡單的說就是 mercedes 和 honda 除了自身的成員以外還會包涵 car 類別的成員, 這就是繼承的概念.
在範例中您應該發現了新的存取權限保留字 protected: , 也就是保護狀態的意思, 這種特殊的狀態在繼承中常常用到. 如果在這個範例中以 私有 去界定 car 的變數, 那 honda 與 mercedes 兩個由 car 類別繼承出來的新類別將無法存取變數. 保護狀態 (protected) 有點類似public:和private:的綜合體, protected:下的成員本身不對外界物件公開, 但對繼承的類別與物件公開. 因此通用類別中的成員如果要讓繼承的類別能夠存取變數, 您必須將變數放在 public: 或是 protected: 下.