// C9_4.cpp : Defines the entry point for the console application. // 類別樣板 #include "stdafx.h" #include using namespace std; // 設定類別 class CaseBox { public: // 建構子定義 CaseBox(double lv = 1.0, double bv = 1.0, double hv = 1.0): m_H(hv) { m_L = lv > bv ? lv: bv; // 確定長大於寬 m_W = bv < lv ? bv: lv; } // 函式 double Area() const { return 2.0 * (m_L * m_W + m_H * m_W + m_H * m_L); } // 運算子函式 int CaseBox::operator>(const CaseBox& Case1) const { return this -> Area() > Case1.Area(); } // 函式用來比較物件和一常數 int operator>(const double& value) const { return Area() > value; } // 函式 -- 二物件相加 CaseBox operator+(const CaseBox& Case1) const { return CaseBox(m_L > Case1.m_L? m_L:Case1.m_L, m_W > Case1.m_W? m_W:Case1.m_W, m_H + Case1.m_H); } // 顯示資訊函式 void DisCase() const { cout << m_L << " " << m_W << " " << m_H << endl; } private: double m_L; double m_W; double m_H; }; int operator >(const double& value, const CaseBox& Case1); // 函數原型宣告 // CheckCases 類別樣本定義 template class CheckCases { public: // 建構子 CheckCases(const T values[], int count); CheckCases(const T& value); CheckCases(){ m_Free = 0; } bool Add(const T& value); // 插入一值函式 T Max() const; // 計算最大值函式 private: T m_Values[100]; int m_Free; }; // 建構子 template CheckCases::CheckCases(const T values[], int count) { m_Free = count < 100 ? count:100; // 不要超過陣列 for(int i = 0; i < m_Free; i++) m_Values[i] = values[i]; // 儲存計數值 } // 建構子接受單一範例 template CheckCases::CheckCases(const T& value) { m_Values[0] = value; // 儲存範例 m_Free = 1; // 下一個閒置記憶體 } // 新增範例函數 template bool CheckCases::Add(const T& value) { bool OK = m_Free < 100; // 檢查是否有空間 if(OK) m_Values[m_Free++] = value; // 若可以則儲存 return OK; } // 獲得最大值之函數 template T CheckCases::Max() const { T theMax = m_Free ? m_Values[0] : 0; for(int i = 1; i < m_Free; i++) // 檢查所有 samples if(m_Values[i] > theMax) theMax = m_Values[i]; //儲存任何較大的 sample return theMax; } int main(int argc, char* argv[]) { CaseBox boxes[] = { // 建立物件的陣列 CaseBox(6.0, 7.0, 3.0), // 設定物件初始值 CaseBox(8.0, 2.0, 9.0), CaseBox(5.6, 3.7, 8.1), CaseBox(9.9, 4.6, 9.1) }; // 建立 CheckCases 物件來保有 CaseBox 物件 CheckCases TryCase(boxes, sizeof boxes / sizeof CaseBox); CaseBox maxBox = TryCase.Max(); // 取得最大值物件 cout << endl // 且輸出值 << "最大表面積盒子 : " << maxBox.Area() << endl; cout << "盒子規格 : " ; maxBox.DisCase(); return 0; }