从暑假留校开始到现在这么久还一直没有写博客,现在开始学习c++觉得有必要把每天学到的记录下来,这样也让自己学的知识更加深刻。
首先看得书不用说肯定是入门级c++ prime plus. 在入门c语言的时候就是看得c prime plus 觉得作者真的写的很细致,每一个知识点都值得细细钻研,现在学习c++自然也选择了c++ prime plus这本书作为入门。
第一章就是讲了c++的发展历史,还有和c语言的一些区别,当然真正开始学习还是从第二章开始的。
第二章
1.一开始看到最主要的区别当然是从scanf到了cin还有printf到了cout,总是使用起来有些不习惯,还是觉得格式化输入输出控制更精确,当然c++这种高级语言肯定也会有格式化输出输入,只是还在后面才会讲到。
2.在c++的开始也会看到一行using namespace std;
这个也是和c语言不同,这个是使用了std
名称空间的一些类。
3.在cout<<endl
这个最后这个endl
意思就是相当于c语言的\n
。
4.还有就是头文件包含的不再是stdio.h
而是变成了iostream
。
第二章讲的其他的都基本上与c语言差不多,总的来说新的知识不是很多。还有就是在c语言的头文件c++都可以用,或者可以直接去掉后.h
然后前面加一个c
比如math.h
在c++中就可以写成cmath
。
第三章
1.c++在初始化的时候可以使用如
int hamburgers = {24}
这样在c++11标准很常见,采用这种方式就可以使用=
也可以不使用=
。其次大括号内可以不包含任何东西,这种情况下,变量将被初始化为零。如int pop = {};
。第三,这有助于更好地防范类型转换错误。
2.c++程序除非用了特殊后缀表示特定的类型或者值太大不能存储在int,c++都是将整形常量存为int值。
3.cout.put()
显示一个字符相当于c语言中的putchar()
。点号是成员运算符,表示成员函数归类所有。如ostream
有一个put()
成员函数就必须用句点将对象和函数名put()
连接起来。这个函数的意思是通过类对象cout
来使用函数put()
。
4.win
还有wout
是c++新的可以处理wcha_t
流的工具,wcha_t
根据系统不同类型也不同,为了让程序有可移植性。除此之外还有char16_t
和char32_t
等类型。
5. 在使用const
关键字的时候如果像这样使用const int toes; toes = 10
这样是不对的,因为在声明常量的时候没有提供值,则该常量的值是不确定的,且无法修改。const
可以将定义限定在特定的函数或者文件中。const
可以用于更复杂的类型。还有一个区别在c++中,可以使用const值来声明数组长度
6.在使用cout
的时候可能会发现,不想c语言那样可以精确到几位小数,其实c++也是可以的,这要在cout.setf()
函数参数ios_base::fixed
和ios_base::floatfield
中进行修改。
7.auto
关键字在c++11中可以由编译器来判断变量的类型。
第三章基本就是将c语言的一些数据类型复习了一遍,顺便也说明了c++和c语言的不同,还有一些关键字的新特性比如auto
还有一些简单介绍的函数比如static_cast()
第四章
1.有的时候
cout
字符串很长的时候,c++允许在两个引号括起来的字符串相拼接。任何两个由空白分隔的字符串常量都将自动拼接程一个。相当于c语言的strcat()
函数。
2.cin
函数使用空白符来确定字符串的结束位置。相当于c语言的scanf
函数。
面向行的输入:cin.getline()
该函数有两个参数,一个是存储输入行的数组名称,第二个参数是要读去的字符数。如果这个参数是20则函数最多读取19个字符,余下空间用于存储自动在结尾处添加的空字符。相当于c语言的gets
函数 但是可以更安全,防止数组越界。
面向行的输入:cin.get()
iostream类中有另一个名为get()
的成员函数,该函数有几种变体。其中一种变体的工作方式与cin.getline()
相似,接收的参数也相同,但是区别是两个函数都读取到行尾,但是get函数并不再读取并丢弃换行符,而是将其留在输入队列中。。
所以有的时候我们可以使用cin.get()
函数来充当c语言的getchar()
函数来吸收换行符。
3.当cin.get
函数读取空行后将设值失效位(failbit),这意味着接下来的输入将被阻断,但是可以用cin.clear()
恢复输入。
4.string
类使用需要在程序头文件包含string
,string
类位于名称空间std
中。使用string
,数组的长度由程序来计算,并且相同的string
类可以相加和赋,可以说简单也方便。
5.当使用cin.getline()
来输入到string
中的时候可以这样用getline(cin,str)
,这也说明getline
不是istream类的一个方法,它将cin
作为参数指出到哪里去查找输入。但是为什么cin>>str(type = string)
为什么可行,这就是后面的友元函数。这里暂时先不说。
6.在c++11中新增一种类型是原始字符串
。 在原始字符串中,字符表示的就是自己。例如\n
不是换行符,而是表示两个常规字符–斜杠和n。原始字符串将“(和)”用作定界符,并使用前缀R来标识原始字符。
7.匿名共用体没有名称,其成员位于相同地址处的变量。由于共用题是匿名的,因此成员被认为是结构体的成员。
8.在c++中分配空间是使用new
但是在最后也需要配套的使用delete
,如果new []
一个数组,那么也要使用delet []
,两个一定要配合使用。
9.模板类vector
也是位于名称空间std中,模板可以使用不同的语法来指出它存储的数据类型。是在堆或者自由存储区中分配空间。比如:vector <typename> vt(n_elem)
n_elem可以是整形常量,也可以是整形变量。需要添加头文件vector
还有一个模板类array
和数组一样,array
长度是固定的,也使用栈(静态内存分配),而不是自由存储区,因此效率和数组一样,但是更方便也更安全。比如:array <typename , n_elem> arr
,与vector
不同的是,n_elem
不能是变量。需要添加头文件array
10.和数组一样,vector还有array都不会检查数组越界的问题,所以如果想要禁止这样的危险行为,可以使用vector和array对象的成员函数at()
,比如:a.at(1) = 2.3//assign 2.3 to a[1]
,中括号表示法和成员函数at
的差别在于,使用at
可以在运行期间捕获非法索引,而程序默认将中断。当然代价是运行时间更长。还有比如他们的其他成员函数begin()
和end()
,让你可以确定边界,以免无意间超界。
总的来说第四章讲了一些复合型的数据结构,还有一些c++特有的数据结构,主要重要的感觉就是模板了还有string类,这些都是可以代替数组来存储字符串,可以更安全也更加方便。还有一定要记住的就是new和delete要匹配。
第五章
其实第五章一开始就看到如果读者熟悉c语言,可粗略浏览本章和第六章。于是我很自觉地就粗略的看了。哈哈哈
1.看了很久基本上都是和c语言相同,唯一有一个觉得可以写的就是
clock()
函数这个可以充当计时器。需要包含头文件ctime
,有的时候根据系统不一样需要用系统时间处以CLOCKS_PER_SEC
这个常量然后获得秒数。函数返回值为clock_t
类型。
2.有的时候使用cin
在一个字符一个的读取的时候,因为遇到空白字符会被忽略这个时候就可以使用cin.get(ch)
。这个函数原型中,行参是引用类型,所以可以改变变量ch
的值。
cin .eof()
函数是查看eofbit
是否被设置,如果检测到EOF
则返回true
,否则返回false
。
同样如果failbit
被设置为1则cin.fail()
返回true
,否则返回false
。
3.使用cin.clear()
可以清除EOF标记,使输入继续。
4.cin.put(ch)
相当于c语言的putchar
函数。
第五章总体来说只有后面几节讲到了一些c++的新东西,其他的可以说都是在复习c语言,可以粗略看过去。(稍微自信一波 嘿嘿嘿)
第六章
1.
cin
函数返回值是int值,当用户本应该输入数字的时候 ,输入了字符这个时候1.变量的值保持不变.2.不匹配的输入还将留在输入队列中.3.cin
对象中的一个错误标记被设置。4.对cin
方法调用将返回false
这个时候如果后面还要继续输入的话,需要先调用cin.clear()
函数清除错误标记,然后才可以继续输入。
2.文件操作需要包含头文件fstream
,其中ofstream
类负责处理输出,位于命名空间std中。需要将ofstream
对象和文件关联起来,为此方法之一就是调用open()
方法。使用完也需要调用close()
方法将其关闭。注意默认情况下,open()
函数将首先截断该文件,即将其长度截短到零—丢弃原有的内容,然后将新的输入加入到该文件中
因为函数继承,所以ofstream
对象可以使用ostream
对象的任何方法,不但可以使用运算符<<
,还可以使用各种格式化方法。如:setf()
和precision()
3.ifstream
和上面一样不过是类似与istream
的对象cin
,也是可以使用cin
的所有方法。
在检查文件是否被成功打开的方法是使用is_open()
。如果文件被成功打开则返回true
,否则返回false
。
4.还有一种很不常用的方法,就是good()
该函数相当于上面的is_open()
不过这个函数是在没有发生任何错误时返回true
至此c++前六章 基本都看了一遍,当然其实是第二遍,因为在看第一遍的时候没有想着写博客,之后看到后面发现前面的有些知识遗忘了所以就再看了一遍顺便写了博客,后面的编程题也都做了一遍。相信第二遍学习会更加细致,发现之前没有发现的新的知识还有容易错的地方,加深对c++的理解。后面的应该会一章一篇博客,因为前面都是基本和c语言出入不大所以就在一个博客写了。
总结: 看了这些篇章的c++后,给我的感觉就是在很多方面c++更加的注重安全但是同时也尽可能的给开发者更多的自由和便利。