从头开始学习C++(C++Primer第五版)
前言:预热一下(请根据相关书籍阅读本篇文章)
- 我自己是学过C、C++、Java、JavaScript 这四个,但是现在还是不清楚这之间的共同的和区别。因此,有必要预热一下。
- 关于什么是编译性语言和解释性语言:
- 参考链接:编译性语言和解释性语言的区别
- 我自己的整理:以下用C语言代替编译性语言,Javascript代替解释型语言。C语言在我以前用VC++写过之后,有一个 .exe文件,而这个文件可以直接点开使用,就好像一个程序一样。比如我下载的游戏,有一个launch.exe文件,点击可以运行游戏了。而JavaScript这样的,写过之后只是出来一个文本格式的文件,可以是记事本,可以是HTML,或者别的,但是C语言就看不到源代码。在我们需要运行JavaScript的时候,会通过一个叫做解释器的 .exe 文件(程序)运行,先将需要运行的那句人能看懂的源代码转为二进制码,再运行。综合比较一下:1、 C语言编写的好处,就是只需要将源代码编译一次,转为二进制生成 .exe 文件,就可以反复运行了,点开,关闭就行。但是看不到源码,并且你也知道这个文件不一定能在任何的系统上运行,比如在Windows可以,在MacOS不一定行。也可能在64位系统行,32位不行,局限性大。2、 JavaScript编写的源代码,好处是每个系统都有对应的解释器,然后需要哪条语句就执行哪条,可以做到 “ 到处执行 ”。但是比较慢,因为要先编译再执行,而C语言的直接执行了。
- 半编译半解释:典型代表Java、C#
- Java是将人能看懂的源代码,通过编译器转为 .class的字节码文件(人和机器都看不懂),然后将这个字节码文件,转给给个系统上面的不同的JVM虚拟机运行,可以做到到处运行。可是为什么不直接成为解释性的呢?还要多一个转为字节码的步骤呢?其实我试验过,我们在写代码的时候会加很多注释,这些注释其实没有用,转为字节码就是筛掉这些注释,提取有用的,让文件小点,同时可以重复使用(这里我不太懂)。
1、第一章:开始
- 代码:
#include<iostream>
int main() {
//输入数字,用空格隔开,Ctrl+Z结尾,接上回车,打印各个数字输入的次数。
std::cout << "输入数字,用空格隔开,Ctrl+Z结尾,接上回车,打印各个数字输入的次数:\n" << std::endl;
int input = 0, store = 0;
if (std::cin >> input) {
int count = 1;
while (std::cin >> store) {
if (store == input) {
count++;
}
else{
input = store;
std::cout << "数字" << input << "出现的次数为" << count << "次!\n" << std::endl;
}
}
}
return 0;
}
上面的代码是C++代码,统计输入并打印的数字的个数。
- iostream是包含标准输入、输出的一个库(是什么暂时作者也没有懂)。std::cout代表命名空间std里面的cout,这个命名空间是存放很多名字的地方,我暂时只能理解为库吧,虽然不一样,但是我是理解为,一个库里面的有cout,而且别的库里面也可能有cout这个名字,所以加上专属的命名空间,就好比我是一班的小孟,这样就不会跟二班的小孟弄混了。
- << / >> :这两个其实是输出/输入运算符。我用我自己的理解来描述一下这个使用运算符的过程。
std::cout << "数字" << input << "出现的次数为" << count << "次!\n" << std::endl;
- 运算符最左边的cout,可以理解为一个缓存空间,然后从第一个运算符开始,运算符右边的交给运算符左边的。第一个是将input这个变量的值放入cout缓存空间,然后将第二个运算符右边的字符串放进去,再把第三个字符串放进去。此时一切可以正常打印了,但是,前面的步骤我是这样理解的:
- 键盘输入的和程序里面写的东西转为输入流传到了缓存中,哪怕是输出,也得先写进cout代表的缓存区,这就是以上步骤。但是cout的作用就是打印,那它就会把缓存里要输出的显示出来。但是我们并没有结束输入流,同时也没有把缓存里面的数据转为输出流然后打印在显示器上。如果这个时候,程序崩溃了,那报错的时候,会把缓存里面的错误报出来,但是缓存里面还有我们待输出的数据,这样影响错误位置判断。因此加上endl的目的就是结束当前行(应该是结束输入流吧),然后将缓存的东西刷新到输出流,然后刷到显示器上面。
- 在这里多嘴一句: C++最重要的一点就是面向对象,作者是学习Java后再回过头复习C++,因此感悟很多。所谓面向对象,就是程序员不需要考虑具体代码的编写,主要考虑要实现的功能,而这些具体功能的代码,其实可以想象成手机,我不需要考虑手机怎么做,我只要知道它有什么功能,我要用什么功能,就行。因此,引出新的类型:类类型 。我们知道什么int 、double 、float 、boolean 等等。所以这个类类型就是class 类型,这个类型是自定义的类型。比如我定义一个手机类型,在这个类里面写了打电话、发短信、上网等功能,而这些功能就是手机类里面的方法 。只是提一下。
- 关于C++的开始就到此为止,其他代码有代码基础的都懂的,我就不赘叙了。
2、第二章:变量和基本类型(搁置中… …)
- 学后总结:本章我初步认为很重要,毕竟说的是基本的数据类型,还有一些限定的东西。但是因为我们真正做项目不一定要到太多,我觉得这章又有点难啃,所以可以知道有哪些就行了。不过这只是我最初步的理解吗,可能真的做项目会用到很多。
- 图片(给我自己看的,方便写总结)
- 类型与变量及其定义与声明
1、类型:类型有:(很抱歉,作者因个人需求将直接从本书第六章开始,以后会补上)。