C++语言基础 例程 异常处理的方法

贺老师的教学链接  本课讲解

例:防止除数为0

#include <iostream>
using namespace std;
template <typename T>
T Div(T x,T y)
{
    if(y==0)
        throw y;//抛出异常
    return x/y;
}

int main()
{
    int x=5,y=0;
    double x1=5.5,y1=0.0;
    try
    {
        //被检查的语句
        cout<<x<<"/"<<y<<"="<<Div(x,y)<<endl;
        cout<<x1<<"/"<<y1<<"="<<Div(x1,y1)<<endl;
    }
    catch(int)//异常类型
    {
        cout<<"除数为0,计算错误!"<<endl;//异常处理语句
    }
    catch(double)//异常类型
    {
        cout<<"除数为0.0,计算错误!"<<endl;//异常处理语句
    }
    return 0;
}

异常处理再例:求三角形周长

#include <iostream>
#include <stdexcept>
using namespace std;
int triangle(int a, int b, int c)
{
    if(a<0 || b<0 || c<0 || a+b<=c || a+c<=b || b+c<=a)
        throw runtime_error("The lengths of three sides can't form triangle");
    return a + b + c;
}

int main()
{
    int total = 0;
    try
    {
        total = triangle(3,4,7);
    }
    catch(const runtime_error& e)
    {
        cout<<e.what()<<endl;
    }
    cout<<total<<endl;
    return 0;
}

在异常处理中处理析构函数

#include <iostream>
#include <string>
using namespace std;
class Student
{
public:
    Student(int n,string nam):num(n), name(nam)
    {
        cout<<"constructor-"<<n<<endl;
    }
    ~Student( )
    {
        cout<<"destructor-"<<num<<endl;
    }
    void get_data( );
private:
    int num;
    string name;
};
void Student::get_data( )
{
    if(num==0)
        throw num; //如num=0,抛出int型变量num
    else
        cout<<num<<" "<<name<<endl;
    cout<<num<<" is in get_data()!"<<endl;
}

void fun( )
{
    Student stud1(1101,"Tan");
    stud1.get_data( );
    Student stud2(0,"Li");
    stud2.get_data( );
}

int main( )
{
    try
    {
        fun( );
    }
    catch(int n)
    {
        cout<<"num="<<n<<",error!"<<endl;
    }
    return 0;
}

在函数嵌套的情况下检测异常处理

#include <iostream>
using namespace std;
int main( )
{
    void f1( );
    try
    {
        f1( );   //调用f1( )
    }
    catch(double)
    {
        cout<<"OK0!"<<endl;
    }
    cout<<"end0"<<endl;
    return 0;
}
void f1( )
{
    void f2( );
    try
    {
        f2( );   //调用f2( )
    }
    catch(char)
    {
        cout<<"OK1!";
    }
    cout<<"end1"<<endl;
}
void f2( )
{
    void f3( );
    try
    {
        f3( );   //调用f3( )
    }
    catch(int)
    {
        cout<<"Ok2!"<<endl;
    }
    cout<<"end2"<<endl;
}
void f3( )
{
    double a=0;
    try
    {
        throw a;   //抛出double类型异常信息
    }
    catch(float)
    {
        cout<<"OK3!"<<endl;
    }
    cout<<"end3"<<endl;
}
时间: 2024-09-22 07:22:27

C++语言基础 例程 异常处理的方法的相关文章

C++语言基础 例程 异常处理的任务

贺老师的教学链接  本课讲解 一个典型的问题程序 #include <iostream> using namespace std; template <typename T> T Div(T x,T y) { return x/y; } int main() { int x,y; double x1,y1; cin>>x>>y; //y要是输入0,就玩完了 cin>>x1>>y1; //同上 cout<<x<<

C++语言基础 例程 案例:一个接口,多种方法

贺老师的教学链接  本课讲解 用指针输出几何体 #include <iostream> using namespace std; class Point { public: Point(double x=0,double y=0); friend ostream & operator<<(ostream &,const Point &); protected: double x,y; }; Point::Point(double a,double b):x(

C++语言基础 例程 应用系统开发:银行储蓄系统

贺老师的教学链接  本课讲解 说明:(1)下面的代码,只演示了利用链表作为存储结构的可选处理方法,本讲提到的其他方面的拓展,请感兴趣做下去的同学自行使用相关技术组合起来,形成一个完整的系统.(2)运行程序,登录用户名和密码,请阅读程序,从程序中找出.建议建立多文件项目,将代码拷贝到IDE中看.(3)本程序由我的2011级学生刘镇参加企业组织的实训中完成,原文在:点击打开链接 Record.h #ifndef HEADER_RECORD //条件编译 #define HEADER_RECORD #

C++语言基础 例程 虚析构函数

贺老师的教学链接  本课讲解 问题的由来 #include <iostream> using namespace std; class Point { public: Point( ) { } ~Point() { cout<<"executing Point destructor"<<endl; } }; class Circle:public Point { public: Circle( ) { } ~Circle( ) { cout<&

C++语言基础 例程 C++中的输入和输出

贺老师的教学链接 程序将自行识别符号 #include <iostream> using namespace std; int main() { int a,b; char op; cin>>a>>op>>b cout<<"result: "<<'\n'; cout<<"a: "<<a<<'\n'; cout<<"b: "<

C++语言基础 例程 重载流插入运算符和流提取运算符

贺老师的教学链接  本课讲解 重载流插入运算符"<<" #include <iostream> using namespace std; class Complex { public: Complex( ) { real=0; imag=0; } Complex(double r,double i) { real=r; imag=i; } Complex operator + (Complex &c2); //运算符"+"重载为成员函

C++语言基础 例程 文本文件的读写

贺老师的教学链接  本课讲解 示例:将数据写入ASCII文件 #include <iostream> #include <fstream> #include <cstdlib> using namespace std; int main( ) { int a[10]; ofstream outfile("f1.dat",ios::out);//定义文件流对象,打开磁盘文件"f1.dat" if(!outfile) //如果打开失败

C++语言基础 例程 标准输入流

贺老师的教学链接  本课讲解 例: 输入个数不确定的成绩 #include <iostream> using namespace std; int main( ) { float grade; cout<<"enter grade:"; while(cin>>grade)//能从cin流读取数据 { if(grade>=85) cout<<grade<<" GOOD!"<<endl; if

C++语言基础 例程 函数中的引用

贺老师的教学链接  本课讲解 引用作为形参 #include<iostream> using namespace std; class Sample { int x; public: Sample(int a): x(a) {cout<<"A";} Sample(Sample &a): x(a.x) {cout<<"B";} int getX(){return x;} }; void disp(Sample &s)