阿瑟 發表
在這篇教學中小弟將以一個類別 (class) 與陣列 (array) 的應用來討論物件導向程式設計帶來了各種好處.
*注意: C++所有語法大小寫有差. 如果您在執行時發現中文無法顯示請自行將程式修改成英文.| #include <iostream.h> #include <stdlib.h> void main() { int input; do { cout << "請選擇要執行的工作:" << endl; cout << "1. 查閱員工薪水" << endl; cout << "2. 發薪" << endl << endl; cout << "請輸入:"; cin >> input; } while(input!=1 && input!=2); if(input==1) { ...冗長的程式碼... } else { ...冗長的程式碼... } system("PAUSE"); } | 
這不是一隻完整的程式, 只是隨便寫寫的一個架構.
我想大部分的人應該都會這樣開始: 輸入, 然後根據輸入做出對應的動作. 
但是, 這樣寫不但費時又不易閱讀.
既然介紹了類別, 當然就來運用一下囉.
來看一下這個範例:
| 
#include <iostream.h>
#include <stdlib.h>
class store //代表單一便利商店
{
   private:
   int salary[5]; //這是紀錄一所便利商店的五個員工分別的薪水
   int salary_sum; //這是紀錄一所便利商店所有員工的薪水總和
   public:
   store(); //這是初始函式, 會將所有類別內數值歸零
   void pay_employee(); //這是付薪水的函式, 每執行一次將給每個員工75元, 並紀錄薪水總和
   void output_salary(); //輸出員工個別的薪水與所有員工的薪水總和
   int return_salary_sum(); //回傳該便利商店的薪水總和
};
class enterprise //代表的是企業
{
   private:
   store stores[20]; //代表這家企業總共有20家便利商店
   int stores_sum; //代表這家企業總共支出的薪水總和
   public:
   enterprise(); // 這是初始函式, 會將所有類別內數值歸零
   void pay_stores(); //給每一家便利商店的員工發薪
   void output_stores(); //列出所有員工的薪水
};
store::store()
{
   for(int i=0; i<5; i++)
   {
      salary[i] = 0;
      salary_sum = 0;
   }
}
void store::pay_employee()
{
   for(int i=0; i<5; i++)
   {
      salary[i] += 75;
      salary_sum += 75;
   }
}
void store::output_salary()
{
   for(int i=0; i<5; i++)
   {
      cout << "第" << i << "個員工的薪水" << salary[i] << endl;
   }
   cout << "這家便利商店所有員工的薪水總和: " << salary_sum << endl;
}
int store::return_salary_sum()
{
   return salary_sum;
}
enterprise::enterprise()
{
   stores_sum = 0;
}
void enterprise::pay_stores()
{
   for(int i=0; i<20; i++)
   {
      stores[i].pay_employee();
      stores_sum += stores[i].return_salary_sum();
   }
   cout << "發薪完成" << endl;
}
void enterprise::output_stores()
{
   for(int i=0; i<20; i++)
   {
      cout << "第" << i << "家便利商店的員工薪水資料:" << endl << endl;
      stores[i].output_salary();
   }
   cout << endl << "所有便利商店薪資總和: " << stores_sum << endl;
}
void main()
{
   int input;
   char cont;
   enterprise myenterprise;
   do
   {
      cout << "請選擇要執行的工作:" << endl;
      cout << "1. 查閱員工薪水" << endl;
      cout << "2. 發薪" << endl << endl;
      cout << "請輸入:";
      cin >> input;
   
      if(input==1)
	  {
             myenterprise.output_stores();
	  }
      else
	  {
             myenterprise.pay_stores();
	  }
	  do
	  {
	      cout << endl << "動作完成, 是否繼續 (y/n)";
          cin >> cont;
	  } while(cont != 'y' && cont != 'n');
   } while(cont != 'n'); 
   system("PAUSE");
}  
 | 
小迪先逐一講解每一段的概念:
class store是一個類別, 其類別代表的是一家便利商店. 每家便利商店有5名員工因此有一個5個元素的陣列來記錄每一位員工的薪水. 其他的函式說明都已經寫在上面.
class enterprise這個類別代表是一家企業, 一家企業有20家便利商店, 因此有一個一個20元素的陣列 (注意喔! 這是以store類別作為型態的陣列喔!)
中間的寫法也沒有什麼特別的因此小弟就略過, 直接到void main()主函式的部分.
主函式為了避免使用者亂輸入因此用do-while迴圈來進行確認, 主函式中宣告了一個myenterprise物件, 代表一家企業. 使用者輸入經過if/else判斷以後再執行工作, 這樣的程式碼不是乾淨多了? 如果沒有使用物件導向的話你只能一行一行寫, 要是程式放著晚點再寫, 搞不好回來的時候自己在寫什麼都看不懂了 ^^||
小弟講解到這裡先打住, 其他的部分都是先前有提過的技巧, 加點邏輯思考應嘎是不難懂. 如果您有空的話可以試試看自己從空白的新原始檔著手開始寫, 對功力的增進很有幫助的.