再次学习C++基础感想(七)

异常处理

在这里插入图片描述

C++里面也是使用的常规的try throw catch组合来处理异常。
下面请看具体的使用方法:
在这里插入图片描述

我们可以发现,异常处理相对于前面学过的通过if语句来判断,更加“分离”了。图中,那个throw语句出现在Div()函数中,但是catch语句出现在main()函数里面,这就实现了二者的分离。底层只用关心自己的事情,发现异常抛出即可,处理交给了上层。
在这里插入图片描述

因此,C++处理异常有如下的特点:
在这里插入图片描述

C++处理异常,有一个专门的库:继承关系如下。
在这里插入图片描述

这里还有一个重要的提醒是:try和catch块必须用花括号括起来,即使里面只有一个语句,我们知道C++里面如果是if后面只有一个语句的话,if里面可以不加花括号的,但是这里一个语句也必须要加,因此,我们建议该加花括号的地方通通都加上。在这里插入图片描述

再看一个例子,求三角形周长的例子。
在这里插入图片描述

C++语言在发现异常之后,就会停止执行该函数,转到它的上层函数去执行,因此在异常后面的语句是不被执行的。 比如在上面的例子中,main()函数在执行了triangle(3,4,7)函数之后,遇到throw抛出的异常,就直接退出到了main()函数内,triangle()函数后面的return语句没有执行了。这点对于普通的函数调用关系不复杂,但是如果加入了类以及类的继承,就会很麻烦了。请看下面的例子:
在这里插入图片描述

在这个例子中,stud2这个对象的学号是0,当我们调用get_data()函数的时候,这是一个异常,此时,get_data()函数会直接退出,返回到上层函数fun(),但是问题来了,这个异常的处理写在更上层的main()里面,在fun()函数里面也处理不了这个异常,那么只能接着返回到更上层的main()函数,但是stud2是定义在fun()函数里面的临时对象,不可以离开作用域,因此此时需要把它析构了。这个析构是自动进行的,析构完fun()函数就直接退出了,最后的那句输出语句并没有执行。

命名空间

声明一个命名空间的形式:
如图所示,以后我们就可以声明自己的命名空间了,对于往往应用于大型程序的C++,合理的使用命名空间是很有用的,可以避免很多的冲突。当然,后面还有使用的方法,使用的时候就是命名空间加里面的声明的元素。
在这里插入图片描述

命名空间也有别名,就是用一个简单的符号代替原来复杂的空间名:
如 namespace TV= television;
对于C++适用的大型程序来说,命名空间是很重要的一种解决冲突的方法。

泛型编程

这是C++的一个更高层次的追求。我们一般在设计程序的时候,都会考虑使用什么数据结构,进而考虑使用什么算法,往往我们设计出来的算法里面的代码对于不同的数据结构是不一样的,但是泛型编程就希望算法里面的代码可以通用,因此可见,它的抽象程度肯定更高,对程序员抽象能力的要求更大。那么,怎么实现泛型的呢?一个是多态多态性,一个是模板。
在这里插入图片描述

C++里面已经帮助我们实现了很多的泛型编程,不用我们自己去研究,去写代码了。最著名的是STL,这个标准模板库。它里面包含以下四个部分。
在这里插入图片描述

容器就是类、数据类型、结构体的抽象。可以装在任何的对象。算法包含了一系列常用的算法:如
在这里插入图片描述

等等这些。迭代器就是一种泛型的指针,有了容器里面装东西,要有一个“指针”来操作它们才可以实现算法呀。迭代器就是这里的“指针”。但是因为它不具体指向一种类型,因此,它在这里被称为迭代器。

好了。就是这么多了。C++基础系列更新结束。谢谢阅读!
欢迎关注我的公众号,是编程还是玩。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

指针的值是地址

觉得还不错,我会继续努力的。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值