日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

您好,歡迎來電子發(fā)燒友網(wǎng)! ,新用戶?[免費(fèi)注冊(cè)]

當(dāng)前位置:電子發(fā)燒友網(wǎng) > 圖書頻道 > 電子 > 《C++程序設(shè)計(jì)實(shí)踐例題》 > 第5章 第五章

第2節(jié) 第二部分

例14.1 給出三角形的三邊a,b,c,求三角形的面積。只有a+b>c,b+c>a,c+a>b時(shí)才能構(gòu)成三角形。設(shè)置異常處理,對(duì)不符合三角形條件的輸出警告信息,不予計(jì)算。

先寫出沒有異常處理時(shí)的程序:

#include <iostream>

#include <cmath>

usingnamespacestd;

intmain( )

{doubletriangle(double,double,double);

 doublea,b,c;

 cin>>a>>b>>c;

 while(a>0&& b>0&& c>0)

  {cout<<triangle(a,b,c)<<endl;

   cin>>a>>b>>c;

  }

  return0;

}

 

doubletriangle(doublea,doubleb,doublec)

{doublearea;

 doubles=(a+b+c)/2;

 area=sqrt(s*(s-a)*(s-b)*(s-c));

 returnarea;

}

修改后的程序如下:

#include <iostream>

#include <cmath>

usingnamespacestd;

voidmain( )

{doubletriangle(double,double,double);

 doublea,b,c;

 cin>>a>>b>>c;

 try//在try塊中包含要檢查的函數(shù)

  {while(a>0&& b>0&& c>0)

    {cout<<triangle(a,b,c)<<endl;

   cin>>a>>b>>c;

    }

  }

 catch(double)                       //用catch捕捉異常信息并作相應(yīng)處理

  {cout<<"a="<<a<<",b="<<b<<",c="<<c<<",that is not a triangle!"<<endl;}

 cout<<"end"<<endl;

}

 

doubletriangle(doublea,doubleb,doublec)  //計(jì)算三角形的面積的函數(shù)

{doubles=(a+b+c)/2;

 if(a+b<=c||b+c<=a||c+a<=b) throwa;   //當(dāng)不符合三角形條件拋出異常信息

 returnsqrt(s*(s-a)*(s-b)*(s-c));

}

 

例14.2 在函數(shù)嵌套的情況下檢測(cè)異常處理。

這是一個(gè)簡(jiǎn)單的例子,用來說明在try塊中有函數(shù)嵌套調(diào)用的情況下拋出異常和捕捉異常的情況。請(qǐng)自己先分析以下程序。

#include <iostream>

usingnamespacestd;

intmain( )

{voidf1( );

 try

  {f1( );}//調(diào)用f1( )

 catch(double)

  {cout<<"OK0!"<<endl;}

 cout<<"end0"<<endl;

 return0;

}

voidf1( )

{voidf2( );

 try

  {f2( );}                      //調(diào)用f2( )

 catch(char)

  {cout<<"OK1!";}

 cout<<"end1"<<endl;

}

 

voidf2( )

{voidf3( );

 try

 {f3( );}                      //調(diào)用f3( )

 catch(int)

 {cout<<"Ok2!"<<endl;}

 cout<<"end2"<<endl;

}

voidf3( )

{doublea=0;

 try

  {throwa;}               //拋出double類型異常信息

 catch(float)

  {cout<<"OK3!"<<endl;}

 cout<<"end3"<<endl;

}

 

例14.3 在異常處理中處理析構(gòu)函數(shù)。

這是一個(gè)為說明在異常處理中調(diào)用析構(gòu)函數(shù)的示例,為了清晰地表示流程,程序中加入了一些cout語句,輸出有關(guān)的信息,以便讀者對(duì)照結(jié)果分析程序。

#include <iostream>

#include <string>

usingnamespacestd;

classStudent

{public:

   Student(intn,string nam)//定義構(gòu)造函數(shù)

{cout<<"constructor-"<<n<<endl;

num=n;name=nam;}

~Student( ){cout<<"destructor-"<<num<<endl;}//定義析構(gòu)函數(shù)

   voidget_data( );                                 //成員函數(shù)聲明

private:

intnum;

string name;

 };

voidStudent::get_data( )                           //定義成員函數(shù)

{if(num==0) thrownum;                            //如num=0,拋出int型變量num

  elsecout<<num<<" "<<name<<endl;                 //若num≠0,輸出num,name

  cout<<"in get_data()"<<endl;                     //輸出信息,表示目前在get_data函數(shù)中

 }

 

voidfun( )

{Student stud1(1101,"Tan");               //建立對(duì)象stud1

stud1.get_data( );                        //調(diào)用stud1的get_data函數(shù)

Student stud2(0,"Li");                   //建立對(duì)象stud2

stud2.get_data( );                        //調(diào)用stud2的get_data函數(shù)

}

 

intmain( )

{cout<<"main begin"<<endl;                 //表示主函數(shù)開始了

cout<<"call fun( )"<<endl;                 //表示調(diào)用fun函數(shù)

try

  {fun( );}                                 //調(diào)用fun函數(shù)

catch(intn)

  {cout<<"num="<<n<<",error!"<<endl;}      //表示num=0出錯(cuò)

cout<<"main end"<<endl;                   //表示主函數(shù)結(jié)束

return0;

}

 

例14.4 名字沖突。

程序員甲在頭文件header1.h中定義了類Student和函數(shù)fun。

//header1.h (頭文件1,設(shè)其文件名為cc14-4-h1.h)

#include <string>

#include <cmath>

usingnamespacestd;

classStudent//聲明Student類

{public:

   Student(intn,string nam,chars)

{num=n;name=nam;sex=s;}

   voidget_data( );

private:

   intnum;

   string name;

   charsex;

 };

voidStudent::get_data( )               //成員函數(shù)定義

{cout<<num<<" "<<name<<" "<<sex<<endl;

}

doublefun(doublea,doubleb)          //定義全局函數(shù)(即外部函數(shù))

{returnsqrt(a+b);}

在main函數(shù)所在的文件中包含頭文件header1.h:

#include <iostream>

#include "cc14-4-h1.h"       //注意要用雙引號(hào),因?yàn)槲募话闶欠旁谟脩裟夸浿械?/p>

usingnamespacestd;

intmain( )

{Student stud1(101,"Wang",18);  //定義類對(duì)象stud1

   stud1.get_data( );

   cout<<fun(5,3)<<endl;

   return0;

   }

 

例14.5 利用命名空間來解決例14.4程序名字沖突問題。

修改兩個(gè)頭文件,把在頭文件中聲明的類分別放在兩個(gè)不同的命名空間中。

//header1.h  (頭文件1)

#include <string>

#include <cmath>

usingnamespacestd;

namespacens1//聲明命名空間ns1

{classStudent                 //在命名空間ns1內(nèi)聲明Student類

{public:

Student(intn,string nam,inta)

{num=n;name=nam;age=a;}

voidget_data( );

     private:

intnum;

string name;

intage;

    };

 voidStudent::get_data()     //定義成員函數(shù)

     {cout<<num<<" "<<name<<" "<<age<<endl;

     }

 

 doublefun(doublea,doubleb)  //在命名空間ns1內(nèi)定義fun函數(shù)

    {returnsqrt(a+b);}

}

 

//header2.h ((頭文件2)

#include <string>

#include <cmath>

usingnamespacestd;

namespacens2                      //聲明命名空間ns2

 {classStudent

{public:

Student(intn,string nam,chars)

{num=n;name=nam;sex=s;}

voidget_data( );

private:

intnum;

charname[20];

charsex;

};

voidStudent::get_data( )

   {cout<<num<<" "<<name<<" "<<sex<<endl;

}

doublefun(doublea,doubleb)

{returnsqrt(a-b);}

 }

 

//main file (主文件)

#include <iostream>

#include "cc14-5-h1.h"          //包含頭文件1

#include "cc14-5-h2.h"          //包含頭文件2

usingnamespacestd;

intmain( )

{ns1::Student stud1(101,"Wang",18);  //用命名空間ns1中聲明的Student類定義stud1

stud1.get_data( );                  //不要寫成ns1::stud1.get_data( );

cout<<ns1::fun(5,3)<<endl;         //調(diào)用命名空間ns1中的fun函數(shù)

ns2::Student stud2(102,"Li",'f');  //用命名空間ns2中聲明的Student類定義stud2

stud2.get_data( );

cout<<ns2::fun(5,3)<<endl;         //調(diào)用命名空間ns1中的fun函數(shù)

return0;

 }

?
嘉禾县| 大连市| 钟祥市| 渝北区| 鞍山市| 宜春市| 稻城县| 胶南市| 大宁县| 元江| 青州市| 南江县| 高安市| 东丰县| 津南区| 石楼县| 怀远县| 汝城县| 华容县| 迁西县| 景东| 江北区| 台山市| 延吉市| 洛阳市| 阆中市| 泰来县| 桂阳县| 南昌县| 望奎县| 资阳市| 日土县| 灵寿县| 乌拉特中旗| 清丰县| 三门县| 太湖县| 镇远县| 莱州市| 平南县| 班玛县|