百合文库
首页 > 网文

如何用轻小说的方式学C (五) 斐波那契与他的小兔子们(5)

2023-04-03编程Ccpp 来源:百合文库
听不懂也没事,听个响也行。
先从main过程入手,可以看到main里面仅仅是对另一个过程的调用。那么让我们来看一下这个“有多严重的心理问题()”
这个过程里面只有一个循环,for(auto 问题 : 心理问题() );
刹那你应该还记得之前凛音说到的那个带冒号的范围for吧,这里就出现了。
冒号的意思表示,前面的这个变量取变后面这个范围的所有的值,并且进行一些操作。这里直接写分号不进行任何操作,所以仅仅是给“问题”赋上全部的值以后结束。
然后,自然而然地我们会看到心理问题,即上面的struct。
final的意思表示不允许被继承,关于继承我们会放到之后的类来讲。
可以看到,心理问题里面有三个部分:类“草”的定义,begin方法及end方法。
通常而言,我们进行for操作的,都是一个集合,比如数组啊容器啊之类的,但是也不是一定的,只要一个数据结构满足一定的条件,我们就可以for,即begin、end还有operator 。
begin返回一个泛迭代器,你可以理解为一个名片,名片上面印着第一个元素的姓名、地址等很多信息。end则是最后一个元素。operator 则代表你可以获得下一个名片。
在这个例子里面,“草”就是这个名片的种类。你会不停地拿到像“草”一样的名片。当执行operator 时,草里面的i会自增。显然,循环是要停下来的,那么就是在operator!=为假(即now==end)时停止。if(i==100) goto end;可以看到end后面的return false;
即循环100次以后会结束循环。
这里有个template,以及后面的一些type_traits内的模板,这是一个典型的错误用法,不过鉴于不会对这里造成什么影响我就不去说了。
“草”是个名片,但是你肯定要根据名片去找具体的元素。每找一次,就调用一次operator*,可以看到operator*会返回一个デデドン类型的元素。循环100次,则会生成100个デデドン。
在类与对象里,对象死亡后有个东西叫“析构函数”,格式就是一个波浪号~加上类的名字デデドン。后面的noexcept(false)表示允许抛出异常。通常而言析构函数是不允许抛出异常的,因为会造成异常语句之后的语句没法正确执行,这里显然不知道为什么就给允许了。再后面看似有个while,实际如果顺利的话只会执行一次——
std::cout<<"まわれ";
执行完毕后,会返回std::cout也是说过的。那么,把std::cout转换为bool的时候,会根据这个流是否依然有效来转换。如果顺利输出了,那么就是true,取反感叹号后变成false,结束循环;但是一旦没顺利输出,则会一直死循环在这,直到引发异常。
生成100个对象,那么这100个对象死的时候也会输出100个まわれ。
综上,这个程序顺利的话能正常运行完毕。

猜你喜欢