《c++ primer》读书笔记9

原创 2004年07月15日 14:19:00

笔记范围:2.6

 

每个程序员都知道,在程序运行过程中,一些情况是不可预料的,无论程序的设计看起来是多么完善,在某个特定的环境里同样会出错,但是这样的错误往往会有些共同之处,比如new的时候也许会空间不足。显然这样的错误。不能完全说是程序设计的问题,但是如果你的程序能对这些情况做出反应,那么这样的程序实用性就会更强。异常机制正是为此而生。

注意,这里用了“机制”这个词,也就意味者规则,正如本节开头所说的:对于异常各人都有自己的处理方式。比如就用if语句处理。本来这是没什么问题的,但是我们生活在一个不幸的时代,程序的规模大得远远超出了个人能力能够接受的程度。我们需要合作,因此统一的编码风格成了必要的事情了,这也是为什么程序员经常告诉初学者编程是最不具备个性化的东西之一的一个原因,

使用异常机制还有一个好处。他可以大大减少代码的长度和规模。对于相同的异常情况可以集中统一处理。这样说很空泛,我们来举一个小例子.,假设我们写个函数分别为,int char 的指针分配相同单位的空间,如不要异常机制,这样写:

bool new_space( int *&pev,char *&ch,int size ) {

      pev = new int[ size ];

      ch = new char[ size ];

      if( !pev )

        return false;

      if( !ch )

        retuen false;

     return true;

}

这样的东西恐怕没人喜欢,因为如果我们这样调用他,new_space( p, c, 6 ),无论空间分配成功与否。调用者都不知道( 问:你不会定义个bool量吗??答:会。烦。我用别的 ),恩,得让我们的东西人性化点。修改如下:


bool new_space( int *&pev,char *&ch,int size ){

      pev = new int[ size ];

      ch = new char[ size ];

      if( !pev ) {

        cerr << "err1" <<endl;//在帮助系统里把err1说明成空间不足

        return false;

      }

      if( !ch ) {

        cerr << "err1" <<endl;

        retuen false;

      }

return true;

}

呵呵,这下对得起可爱的用户了吧?可是发现有点对不起自己。cerr << "err1" <<endl;  retuen false; 我写了两遍,这是两个指针,如果十个呢?天哪。老板,加工资吧(回答你们一定知道),那好,试试异常机制,再改。

bool new_space( int *&pev,char *&ch,int size ){

    try

    {

       string word ( "err1" );

       pev = new int[ size ];

       ch = new char[ size ];

       if( !pev )

           throw word;

       if( !ch )

           throw word;

    }

    catch( string err )

    {

       cerr << err << endl;

       return false;

    }

     return true;

}

呵呵,这下比较舒服了。大家可能看到上面那函数好像并没有减少什么长度,yes,但如果处理的参数不只两个,很多,你就会发现他省了你很多力气,

   上面主要想说明异常机制的好处和用法(水平有限,可能例子并不好)在本节中还有个重要的内容,那就是程序处理异常的方式和顺序。比如上面的程序,我们想让它在当分配成功时显示ok,那么cout <<  “ok”  << endl;写在那儿呢?如果我们的try抛出的异常在函数里没有相应的catch怎么办呢?这些书上都说很详细。仔细看吧,一定收获不少。

C++Primer第五版 8.2.1节练习

练习8.4:编写函数,以读模式打开一个文件,将其内容读入到一个string的vector中,将每一行作为一个独立的元素存于vector中。 答:见 练习8.4.cpp练习8.5:重写上面的程序,将每...
  • fengzhanghao23
  • fengzhanghao23
  • 2015年09月17日 07:23
  • 1340

C++ Primer Plus第六版 第六章 编程练习答案

/***************************************************************************************************...
  • zhaoshu01234
  • zhaoshu01234
  • 2014年07月16日 23:18
  • 3930

C++ Primer学习总结 第7章 类

第7章 类 1.    引入const成员函数(C++ Primer P231-232) C++类的常量对象是无法调用非const成员函数的,如果想让常量对象调用某个成员函数,必须声明...
  • u013480600
  • u013480600
  • 2015年03月07日 01:02
  • 1567

C++ primer 读书笔记(9)

函数的声明 在函数声明里值得注意的一点是
  • u013457107
  • u013457107
  • 2014年05月20日 20:58
  • 405

C++primer读书笔记9-转换与类类型

有时候指定了自己类类型来表示某种类型数据如SmallInt,那么为了方便计算就会指定一个转换操作符,将该类类型在某种情况下自动的转换为指定的类型 转换操作符 operator type(); 转换函数...
  • zhuhuangtianzi
  • zhuhuangtianzi
  • 2014年07月21日 01:45
  • 826

《C++Primer》读书笔记(9)

1.运算符重载,当有的时候对象运算与正常运算符的操作意义相同时,为了代码的简洁,我们就可以使用运算符重载。 比如一个简单的加法操作,没有必要再写一个add方法,还是一个+看着比较顺眼。 // Co...
  • puppet_master
  • puppet_master
  • 2015年05月14日 20:00
  • 407

《C++ Primer第五版》读书笔记(9)--ASSOCIATIVE CONTAINERS

associative containers:map,set,multimap,multiset,unordered_map,unordered_set,unordered_multimap,unor...
  • totuswhf
  • totuswhf
  • 2014年02月26日 21:25
  • 1216

读书笔记:C++ primer 5th edition--chapter9.顺序容器

part1.概述 1.类型:vector,deque,list,forward_list,array,string 2.与内置数组类似,array对象大小固定,不支持添加删除。 3.forwar...
  • lebula
  • lebula
  • 2016年10月07日 21:35
  • 162

《C++_Primer》MSDN读书笔记

  • 2013年11月07日 10:42
  • 204KB
  • 下载

C++Primer(4ed)读书笔记

  • 2008年08月24日 11:03
  • 740KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:《c++ primer》读书笔记9
举报原因:
原因补充:

(最多只允许输入30个字)