C++系列笔记(十二)

简介: C++系列笔记(十二)

导读】《21天学通C++》这本书通过大量精小短悍的程序详细而全面的阐述了C++的基本概念和技术,包括管理输入/输出、循环和数组、面向对象编程、模板、使用标准模板库以及创建C++应用程序等。这些内容被组织成结构合理、联系紧密的章节,每章都可在1小时内阅读完毕,都提供了示例程序清单,并辅以示例输出和代码分析,以阐述该章介绍的主题。本文是系列笔记的最后一篇,欢迎各位阅读指正!            

异常处理


使用try和catch捕获异常


  try和catch是最重要的C++关键字。要捕获语句可能引发的异常,可将它们放在try块中,并使用catch块对try块可能引发的异常进行处理:

voidsomefunc()
{
try    {
int*pNumber=newint;
*pNumber=999;
deletepNumber;
    }
catch(……)  //catches all exceptions    {
cout<<"Exception in somefunc(),quitting"<<endl;
    }
}

catch(……)捕获未被其他catch块显示捕获的所有异常。

自定义异常类应继承std::exception,这让你能够重用捕获std::exception异常的所有catch()块

总结:编写优秀的C++代码


• 给变量指定(无论是对您还是其他人来说都)有意义的名称。值得多花点时间给变量取个好名。• 对于int、float等变量,务必进行初始化。

• 务必将指针初始化为NULL或有效的地址———如运算符new返回的地址。

• 使用数组时,绝不要跨越其边界。跨越数组边界被称为缓冲区溢出,可导致安全漏洞。

• 不要使用C风格字符串(char*'),也不要使用strelen()和strcopy()等函数。std::string更安全,还提供了很多有用的方法,如获取长度、进行复制和附加的方法。

• 仅当确定要包含的元素数时才使用静态数组。如果不确定,应使用std::vector等动态数组。

• 声明和定义接受非 POD 类型作为输入的函数时,应考虑将参数声明为引用,以免调用函数时执行不必要的复制步骤。

• 如果类包含原始指针成员,务必考虑如何在复制或赋值时管理内存资源所有 权,即应考虑编写复制构造函数和赋值运算符。

• 编写管理动态数组的实用类时,务必实现移动构造函数和移动赋值运算符,以改善性能。

• 务必正确地使用const。理想情况下,get()函数不应修改类成员,因此应将其声明为const函数。同样,除非要修改函数参数包含的值,否则应将其声明为const引用。

• 不要使用原始指针,而应尽可能使用合适的智能指针。

• 编写实用类时,务必花精力实现让它使用起来更容易的运算符。

• 在有选择余地的情况下,务必使用模板而不是宏。模板不但是通用的,还是类型安全的。

• 编写类时,如果其对象将存储在诸如vector和list等容器中,或者被用作映射中的键,务必实现运算符<,它将用作默认排序标准。如果您编写的lambda表达式很长,应考虑转而使用函数对象,即实现了operator()的类,因为函数对象可重用,且只有一个地方需要维护。

• 绝不要认为运算符new肯定会成功。对于分配资源的代码,务必处理其可能引发的异常,即将其放在try块中,并编写相应的catch()块。

• 绝不要在析构函数中引发异常。

PS:C++系列已经完结啦![撒花]!如果你是一路跟下来并且仔细看的话相信你现在对C++已经有一个大概的了解,并能编写简单程序。接下来博主会完成《C++ Primer Plus》中文版(第六版)的课后习题编程练习,答案会发布在我的github上,欢迎star和fork,也可以随时跟我一起交流!(现在已经更新到第三章。

github链接:https://github.com/xwr96/Cpp-Primer-Plus

相关文章
|
7月前
|
算法 C++
算法笔记:递归(c++实现)
算法笔记:递归(c++实现)
|
7月前
|
编译器 C++
《Effective C++ 改善程序与设计的55个具体做法》 第一章 笔记
《Effective C++ 改善程序与设计的55个具体做法》 第一章 笔记
|
5月前
|
C++ 容器
【C/C++笔记】迭代器
【C/C++笔记】迭代器
34 1
|
5月前
|
存储 安全 程序员
【C/C++笔记】迭代器范围
【C/C++笔记】迭代器范围
75 0
|
6月前
|
C++ Windows
FFmpeg开发笔记(三十九)给Visual Studio的C++工程集成FFmpeg
在Windows上使用Visual Studio 2022进行FFmpeg和SDL2集成开发,首先安装FFmpeg至E:\msys64\usr\local\ffmpeg,然后新建C++控制台项目。在项目属性中,添加FFmpeg和SDL2的头文件及库文件目录。接着配置链接器的附加依赖项,包括多个FFmpeg及SDL2的lib文件。在代码中引入FFmpeg的`av_log`函数输出"Hello World",编译并运行,若看到"Hello World",即表示集成成功。详细步骤可参考《FFmpeg开发实战:从零基础到短视频上线》。
259 0
FFmpeg开发笔记(三十九)给Visual Studio的C++工程集成FFmpeg
|
8月前
|
存储 C++ 容器
黑马c++ STL部分 笔记(7) list容器
黑马c++ STL部分 笔记(7) list容器
|
8月前
|
算法 C++ 容器
黑马c++ STL常用算法 笔记(5) 常用算术生成算法
黑马c++ STL常用算法 笔记(5) 常用算术生成算法
|
8月前
|
算法 C++ 容器
黑马c++ STL常用算法 笔记(4) 常用拷贝和替换算法
黑马c++ STL常用算法 笔记(4) 常用拷贝和替换算法
|
8月前
|
存储 算法 搜索推荐
黑马c++ STL常用算法 笔记(3) 排序算法
黑马c++ STL常用算法 笔记(3) 排序算法
|
8月前
|
算法 C++
黑马c++ STL常用算法 笔记(2) 查找算法
黑马c++ STL常用算法 笔记(2) 查找算法