整理了網上流傳的經典三角形代碼,添加了自己理解的內容。
最終一個目的,就是先會用c++中的try catch 塊。然後深入領悟c++的錯誤機制。
在這裡拿出來,想與大家分享,有什麼寫的不對的地方,或者什麼寫的欠妥的地方,
或者有什麼可以更好地改進的地方,都很歡迎提出來。
文在這裡也同樣不勝感激之情。
// AbnomalTest.cpp : 定義控制台應用程式的進入點。//#include "stdafx.h"#include <iostream>#include <afx.h>using namespace std;class triangle //定義一個三角形的類{public :float a,b,c,d; //三角形三邊a,b,c,海倫公式常量dfloat s; //三角形面積public:triangle(){}triangle(float a1,float b1,float c1){ a=a1; b=b1; c=c1;}//判斷是否是三角形string judgment() /*throw ( string )這裡叫做異常的規範*/{ string temp; int TempNum; if((a+b)<c ||(a+c)<b || (c+b)<a) {TempNum=9;temp="不是三角形";wcout<<temp.c_str ()<<endl;throw(TempNum); } /*用throw拋出,並不是在控制台可視輸出,而是專門用catch來接著,然後做處理*/ else { /*locale loc("chs"); wcout.imbue(loc);*/ temp="是三角形"; cout<<temp.c_str()<<endl; throw(temp); }}void dimension()//計算面積 { d=(a+b+c)/2; //海倫公式 s=sqrt(d*(d-a)*(d-b)*(d-c));}};int _tmain(int argc, _TCHAR* argv[]){triangle a(7,2,3);//僅傳值,初始化 try{a.judgment();a.dimension();cout<<"三角形a的面積為: "<<a.s<<endl;}//catch (string & TempErr) //接受了,接受了,請注意,我還是定義了一個 string形的來接受的。//{// 要麼用這個自己定義的catch塊要麼使用萬能捕獲塊,好像兩個不能同時使用// wcout<<TempErr.c_str()<<endl;//}catch(...){ /*locale loc("chs");//要麼使用這個塊輸出,要麼使用另一個輸出 wcout.imbue(loc); wcout<<L"萬能捕獲"<<endl;*/cout<<"萬能捕獲"<<endl;}return 0;}