C++程序设计:原理与实践读书笔记(第五章)

        C++提供了一种错误处理机制:异常。

        异常的基本思想是:如果一个函数发现一个自己不能处理的错误,它不是正常返回,而是抛出(throw)一个异常来表示错误的发生。任一个直接或间接的函数调用者都可以捕捉到这一异常,并确定应该如何处理。函数可以用try语句来处理异常:把所要处理的异常情况罗列在catch语句后。如果出现一个没有被任何调用函数处理的异常,程序终止运行。

1.参数错误

class Bad_area{};        //一个专门报告area()错误的类

//计算矩形面积
//在参数错误时抛出Bad_area异常
int area(int length, int width)
{
    if(length <= 0 || width <= 0) throw Bad_area{};
    return length*width;
}

        需要注意的是Bad_area{}表示“创建一个Bad_area类型的缺省值对象”。因此throw Bad_area{}表示“创建一个Bad_area类型的对象并抛出它”。

        现在我们可以这样写:

int main()
{
    try{
        int x=-1;
        int y=2;
        int z=4;
        //...
        int area1 = area(x, y);
        int area2 = framed_area(1, z);
        int area3 = framed_area(y, z);
        double ratio = area1/area3;
    }
    catch(Bad_area)
    {
        cout << "Oops! bad arguments to area()\n";    
    }
}

        对于简单程序来说在main()中捕捉runtime_error更理想:

int main()

try{
    //... 我们的程序 ...
    return 0;
}catch(runtime_error& e)
{
    cerr<<"runtime error:"<<e.what()<<'\n';
    keep_window_open();
    return 1;
}

        或者对异常进行一些通用处理:

int main()

try{
    //我们的程序
    return 0;    //0表示成功
}
catch(exception& e)
{
    cerr<<"error: "<<e.what()<<'\n';
    keep_window_open();
    return 1;    //1表示失败
}
catch(...){
    cerr<<"Oops: unknown exception!\n";
    keep_window_open();
    return 2;    //2表示失败
}

        这里我们加上catch(...)来处理任何其他类型的异常。

        前置条件助于我们避免设计错误和及早发现使用错误。

int my_complicated_function(int a, int b, int c)
//参数为正数且a<b<c
{
    if(!(0<a && a<b && b<c))
    {
        error("bad arguments for mcf");
    }
    //...
}

        我们可以对函数的后置条件进行一部分的检查:

int area(int length, int width)
//计算矩形的面积
//前置条件:长度和宽度是正数
//后置条件:返回值是正数,表示矩形面积
{
    if(length<=0 || width<=0) error("area() pre-condition");
    int a = length * width;
    if(a<=0) error("area() post-condition");
    return a;
}

为编写实际的应用程序做好准备:无论你是为了进行软件开发还是进行其他领域的工作。《C++程序设计原理实践(英文版)》假定你的最终目标是学会编写实际有用的程序。以基本概念和基本技术为重点:与传统的C++教材相比,《C++程序设计原理实践(英文版)》对基本概念和基本技术的介绍更为深入。这会为你编写有用、正确.易维护和有效的代码打下坚实的基础。, 用现代C++语言编程:, 《C++程序设计原理实践(英文版)》一方面介绍了通用的程序设计方法(包括面向对象程序设计和泛型程序设计)。另一方面还对软件开发实践中使用最广泛的程序设计语言——C++进行了很好的介绍。《C++程序设计原理实践(英文版)》从开篇就开始介绍现代C++程序设计技术,并介绍了大量关于如何使用C++标准库来简化程序设计的内容。, 适用于初学者以及任何希望学习新知识的人:, 《C++程序设计原理实践(英文版)》主要是为那些从未编写过程序的人编写的。而且已经由超过1000名大学一年级新生试用过。不过,对于专业人员和高年级学生来说,通过观察公认的程序设计大师如何处理编程中的各种问题。同样也会获得新的领悟和指引。, 提供广阔的视野:, 《C++程序设计原理实践(英文版)》第一部分非常广泛地介绍了基本程序设计技术,包括基本概念、设计和编程技术、语言特性以及标准库。这些内容教你如何编写具有输入、输出、计算以及简单图形显示等功能的程序。《C++程序设计原理实践(英文版)》第二部分则介绍了一些更专门性的内容(如文本处理和测试),并提供了大量的参考资料。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值