整理了網上流傳的經典三角形代碼,添加了自己理解的內容。
最終一個目的,就是先會用c++中的try catch 塊。然後深入領悟c++的錯誤機制。
在這裡拿出來,想與大家分享,有什麼寫的不對的地方,或者什麼寫的欠妥的地方,
或者有什麼可以更好地改進的地方,都很歡迎提出來。
文在這裡也同樣不勝感激之情。
[cpp]
// AbnomalTest.cpp : 定義控制台應用程序的入口點。
//
#include "stdafx.h"
#include <iostream>
#include <afx.h>
using namespace std;
class triangle //定義一個三角形的類
{
public :
float a,b,c,d; //三角形三邊a,b,c,海倫公式常量d
float 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;
}