CSDN话题挑战赛第2期
参赛话题:学习笔记
之前的学习,我已经将C++的编译环境和编译器都配置完成,现在要开始真正的步入这门语言的学习。如何快速的学习一门编程语言?
一、学习注意事项:
1. 首先了解这门语言的基本数据类型、基本语法和主要语言构造,主要数学运算符和print函数的用。
2. 其次掌握数组和其他集合类的使用,适当理解一下泛型。
3. 简单字符串处理。
4. 了解掌握基本面向对象或者函数式编程的特征
5. TDD的基本技能:异常、错误处理、断言、日志和调试支持,对单元测试的支持
6. 程序代码和可执行代码的组织机制,运行时模块加载、符号查找机制,据说这是初学者要攻克的一个难点,因为在学习的过程中容易忽视这方面的知识点。
7. 基本输入输出和文件处理,输入输出流类的组织。
8. C++语言如何进行callback方法调用。
注:callback回调函数是一种将函数作为参数传递给另一个函数,在异步操作完成后执行的技术。在C++中,回调函数通常使用函数指针或函数对象来实现。当异步操作完成后,会调用注册的回调函数,以便执行相应的处理逻辑。
9. 有必要的话,在工作或者课余的闲暇时间,可以着重考察两个问题,第一,这个语言有哪些惯用法和模式,第二,这个语言的编译/解释执行机制。
二、入门练习:运用C++中的任意输出流语句(cout)打印Hello world!
解:代码样例:
#include <iostream>
using namespace std;
int main() {
cout<<"Hello world!";
return 0;
}
我首先在电脑桌面新建立一个cpp文件夹,再在该文件夹里面新建一个文本文件,文件名称为test.cpp,使用vscode编辑器打开test.cpp这个文件,在该文件中写入上述代码样例,利用Crl+S组合键保存文件。
然后试着运行一下这个程序:
- win+R打开运行并输入cmd点击回车
- 输入cd Desktop\cpp 进入已放程序的文件夹
- 输入命令 g++ test.cpp -o a.exe 编译我的 C++ 程序,如果没有任何提示说明我的代码无误
- 输入命令 a.exe 运行我的程序,发现命令行中打印出来了 Hello world! 的字样!
(画红线的地方是要输入的命令)我们可以看到这个C++程序最终的输出结果为:Hello world!
三、 程序基本框架
#include <iostream>// 头文件
using namespace std;// 引入命名空间
// 主函数
int main() {
cout << "Hello world!" << endl;
// 返回值为 0
return 0
}
下面我们来慢慢弄懂这串代码,解读每一处内容所表达的含义
1. 头文件:
C++语言定义了一些头文件,上面这段程序中,就包含了头文件<iostream>,头文件中包含了程序中必须或有用的信息。
2. 引入头文件:
利用#+关键字include,后面跟着函数库名字。若是遇到C++内置的包,那就用<>这个尖括号来包裹;若不是C++内置的库,而是自己编写的函数库或者第三方库,那么必须使用双引号" "来包裹。双引号" "也可以包裹官方库,尖括号<>却不可以包裹第三方库。
注意:引号" "要用英文模式输入。
" " | 用来包裹官方包库或者非C++内置包,即自己编写的函数库或者第三方库 |
< > | 用来包裹C++内置包(不可以包裹第三方库) |
<iostream> 这个库的名字可以拆分为 istream 和 ostream,即为 输入输出流 的意思,其主要功能就是为程序提供获取输入和向外输出的功能。上面那段程序就是 <iostream> 库中定义的 cout 对象所做的事情。
3. 命名空间
using namespace std; 这行代码告诉编译器使用 std 这个命名空间。
std 这个命名空间是定义在 <iostream> 这个库中的,std 中定义了许多模板类和常用的功能类和功能函数。比如输入输出使用的 cin 和 cout 以及输出流中使用的换行符 endl 都定义在其中。
命名空间可以使用 命名空间名::组件名 的方式来调用其中定义的组件。
例如上面那段打印Hello world!的代码其实也可以这样写:
#include <iostream>
int main() {
std::cout << "Hello world!" << std::endl;
return 0;
}
事实上在我们平时写代码时使用到std中的内容不只一两处,所以最好的方式还是在主函数上面通过using namespase std;的方式引入这个命名空间。
4. 主函数
main() 函数是一个程序的入口,int main() 称作主函数,任何一个 C++ 程序都从这个函数开始执行。
C++ 标准规定 main() 函数的返回值类型为 int,返回值用于表示程序的退出状态,如果返回 0 则表示程序正常退出,如果返回 非 0,则表示出现异常。
因此在一个C++程序的基本框架中必须要有main()函数,而且必须return 0;即可。
5. 注释
(1)两种格式:
- 单行注释:// 描述信息
- 通常放在一行代码的上方,或者一条语句的末尾,对该行代码说明
- 注释以 // 开始,直到 行末 为止
- 多行注释: /* 描述信息 */
- 通常放在一段代码的上方,对该段代码做整体说明
- 注释以 /* 开始,以 */ 终止,也就是说,注释中间可以换行,将多行代码进行“无效化”
(2)作用:
- 在代码中加一些说明和解释,方便自己或其他程序员程序员阅读代码
- 编译器在编译代码时,会忽略注释的内容
6. 扩展知识点:
(1)关键字
关键字是具有特殊意义的预定义保留标识符,它们不能用作程序中的常量名、变量名或其他标识符名称,它们被称为C++的保留字。以下例举出了C++中的关键词。
alignas | constinitc | int | static_cast |
alignof | continue | long | struct |
andB | co_awaitc | mutable | switch |
and_eqB | co_returnc | namespace | template |
asma | co_yieldc | new | this |
auto | decltype | noexcept | thread_local |
bitandB | default | notB | throw |
bitorB | delete | not_eqB | true |
bool | do | nullptr | try |
break | double | operator | typedef |
case | dynamic_cast | orB | typeid |
catch | else | or_eqB | typename |
char | enum | private | union |
char8_tc | explicit | protected | unsigned |
char16_t | exportc | public | using 声明 |
char32_t | extern | register reinterpret_cast | using 指导 |
class | false | requiresc | virtual |
complB | float | return | void |
conceptc | for | short | volatile |
const | friend | signed | wchar_t |
const_cast | goto | sizeof | while |
constevalc | if | static | xorB |
constexpr | inline | static_assert | xor_eqB |
需要注意的是:常用的关键字很少,我们不需要特别去记忆,如果在写代码过程中变量名与关键字冲突,编译器的报错通常都会指出,了解相关报错也就很好 debug 了,在有语法高亮的编辑器中编程的时候也可以通过是否有高亮颜色来判断一个单词是否是关键字。
(2)符号
· 大部分C++代码都需要用英文输入法下的分号;来结束一条代码语句
· C++ 的逻辑分块都是用 () 小括号和 {} 大括号来区分的,小括号()通常是给函数和方法使用;而大括号{}通常是给大量的定义分块使用的,如定义:类,结构体,函数。
在学习和运用编程语言的过程中,必然会遇到许许多多的难题,这就需要我们耐心并且细心的去解决,作为一个初学者我们遇到的问题在网络上基本都可以找到解决的办法。