C++入门经典 笔记 (第二十四章)处理异常和错误

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lishanlu136/article/details/48262409

要想写好一段程序,会考虑很多问题,比如:程序的逻辑性,程序的语法问题和程序运行阶段程序的健壮性问题等。区分Bug、逻辑错误和异常至关重要。Bug是由于程序员犯错引起的;逻辑错误是由于程序员对问题解决问题的方式不了解引起的;最后,异常是由于不常见但可预见的问题(如用户错误输入、内存或硬盘空间等资源耗尽)引起的。

处理意外情况

程序员可通过设计审核和详尽测试来发现逻辑错误。但是,异常不同,你无法消除异常情况,只能为此做好准备,相应的措施有:崩溃、通知用户并妥善退出、通知用户,并让用户尝试恢复并继续执行、采取正确的措施,在不影响用户的情况下继续运行。

异常

在C++中,异常是一个对象,从发生问题的代码传递给处理问题的代码。发生异常被称为引发,处理异常被称为捕获。

对于可能发生问题的代码,应将其放在try块中。try块是一个用大括号括起来的代码块,其中的代码可能引发异常。catch块紧跟在try块后面,负责对异常进行处理。如:

try

{

someDangerousFunction();

}

catch(outofMemory)

{

//take action to recover from low memory conditon

}

catch(fileNotFound)

{

//take action when a file is not found

}

规范代码的编写

1、大括号

1)匹配的大括号应水平对齐。

2)在定义和声明中,最外面的大括号应在最左边;内部的语句应该缩进;其他所有的大括号都应与相关联的语句左对齐。

3)对于特别长的代码块,应将注释放在代码块的右大括号后面,并指出代码块的用途。

4)大括号应单独占一行。

2、长代码行

1)确保不用水平滚动就能看到整行代码。超出右边界的代码易被忽略,且水平滚动很烦人。将一行代码分成多行时,对后续行进行缩进。尽量在合理的地方分行,将运算符放在前一行末尾(而不是下一行开头),这样可以清晰的知道,该行并不完整,后面还有其他代码。

2)制表符应包含三四个空格,确保编辑器能够将制表符转换为这样的长度。

3、switch语句

按如下方式缩进switch语句,可节省水平空间:

switch(variable)

{

case  valueone:

          actionone();

          break;

case valuetwo:

          actiontwo();

          break;

default:

        //bad  action

         break;

}

4、程序文本

可使用下面的技巧让代码易于阅读。

1)使用空白提高可读性。

2)不要在对象、数组名和运算符(.、->、[ ])之间使用空格。

3)单目运算符与其操作数相关联,因此不要在它们之间添加空格,但是可以在操作数一边添加空格。单目运算符包括!、~、++、--、*(用于指针)、&(取地址)和sizeof。

4)双目运算符两边都应有空格,双目运算符包括+、=、*、/、%、》、《、<、>、==、!=、&、|、&&、||、?:、+=等。

5)不通过省略空格来指示优先级,如(4+  3*2)。

6)在逗号和分号后面加空格,但在前面不加。

7)圆括号两边不应该有空格。

8)用空格将关键字(如if)分开,如 if (a==b)。

9)使用空格将单行注释的内容同//分开。

10)将指针或引用指示符紧靠类型名,而不是变量名。如: char*   foo;  int&  theInt;

11)不在一行中声明多个变量,除非它们彼此相关。

5、标识符命名

1)标识符名称应足够长,以便具有描述性。

2)避免意义不明确的缩写,应将含义拼写出来。

3)仅当简短性可提高代码的可读性或用途十分明显不需要描述性名称时,才使用短名称(i、p、x等)。

4)变量名的长度应与其作用域相称。

5)函数(或方法)名通常为动词或动词-名词短语,如secrch()、reset()、findParagraph()。变量名通常为抽象名词,可以带一个附加名词,如count、state。布尔变量应相应地命名,如windowIconized、fileIsOpen。

6、名称的拼写和大写

1)标识符应采取一致的命名方式,在合适的情况下混合使用大小写。函数、类、typedef、结构、数据成员和局部变量的名称应采用首字母小写

2)枚举常量应以表示枚举类型缩写的小写字母开头。如:

enum   TextStyle

{

tsPlain,

tsBold,

tsItalic,

};

7、注释

1)尽可能使用C++单行注释(//),而不是多行注释(/* */)。

2)高级注释比处理细节更重要。要增加价值,而不是复述代码。将重点放在函数和代码块的语义上:指出函数的功能、副作用、参数类型和返回值;描述做出(或没有做出)的所有假设。

3)使用采用合适标点符号和大小写的完整的句子,不然到后面自己也看不懂。

4)在程序、函数和头文件模块开头添加注释,指出模块的用途、输入、输出、参数、最初编写它的程序员以及所做出的修改(包括日期和程序员)。

5)使用空行来帮助读者理解所发生的事情,将语句分成逻辑组。

8、设置访问权限

1)总是使用public:、private:和protected:,不要依赖于默认访问设置。

2)先列出公有成员,其次是保护成员,然后是私有成员。在方法后面集中列出数据成员。

3)在合适的地方首先列出构造函数,然后是析构函数;集中列出同名的重载方法;尽可能集中列出存取器函数。

4)考虑按字母顺序排列每组中的成员函数和成员变量。

5)虽然重写函数时关键字virtual是可选的,但是应尽可能使用它。

9、类定义

1)尽可能让成员函数定义的排列顺序与声明顺序一致,这让函数更容易找到。

10、包含文件

最大限度地减少在头文件中包含的文件。最理想情况是,只包含基类的头文件,其他必须包含的文件是声明类成员对象的头文件。

11、使用const

在合适的地方使用const:参数、变量和成员函数。

猜你喜欢

转载自blog.csdn.net/lishanlu136/article/details/48262409