2.1 进入C++
- 注释以//打头
- 想要执行程序后保持窗口打开(有的情况下执行完后窗口会自动关闭)可以在return前加上
cin.get()
2.1.1 main()函数
- 函数结构为:函数返回类型 函数名 (形参列表) 函数体
- C++中main()函数是操作系统和程序之间的连接,即运行C++程序时,系统自动调用main()函数;如果没有main()函数,系统会指出未定义
- 用作库函数的代码可以不需要main()函数,且库函数一般用于生成动态链接库(DLL),被其他C++代码调用
2.1.2 C++注释
2.1.3 C++预处理器和iostream文件
- 编译器对源代码中的
#include <iostream>
预处理后,源代码中的#include <iostream>
被替换成了iostream
中的代码,此时源代码变成了一个包含iostream
内容的复合文件
2.1.4 头文件名
2.1.5 名称空间
- 通过名称空间来避免多个库中重名的定义,尤其是在使用不同产品的库函数时
- std是C++标准库的命名空间
- 如果命名空间放在全局,则在全局调用不需要加上名称空间前缀;如果在函数内申明命名空间,则可使用的范围也仅在函数内部
using std::cout;
using std::endl;
using std::cin;
2.1.6 使用cout进行C++输出
- C++中双引号引起来的字符是字符串
- \n在字符串中表示换行
- \n 与 endl换行的区别是,endl确保程序继续运行,而有的系统中执行\n后需要输入信息才会出现
2.1.7 C++源代码的格式化
- 有些语言是面向行的,这意味着每条语句占一行,比如python;但在C++中,分号才表示一条语句的结尾,这就意味着,
using namespace std
这一语句中的三个词即使使用回车写成三行,也是合法的代码。因此在C++中,只要能使用空格的地方都可以使用回车接着写,尽管在书写方面不易阅读,但它是合法的代码;但一句完整的字符串不能使用空格分割成两行 - 一行代码中不可分割的元素叫做标记(token),空格、制表符、回车统称为空白(white space)
2.2 C++语句
2.2.1 声明语句和变量
2.2.2 赋值语句
2.2.3 cout的新花样
- cout相比C中的printf函数,cout能自动区分需要输出的内容是int型的25还是string型的"25";而在printf中,需要用
%s
, %d
来区分
2.3 其他C++语句
2.3.1 使用cin
- iostream将cout和cin定义为流的对象,输入和输出变量时,变量是作为流进行输入输出
2.3.2 使用cout进行拼接
- 不加endl即可;此外还可以使用连续的
<<
进行多行打字,例如:
cout << "Now you have 14";
cout << "carrots";
cout << endl;
cout << "Now you have 14"
<< "carrots"
<< endl;
2.3.3 类简介
- C++的核心概念就是面向对象,类是实现面向对象的途径
- 类是一种用户定义的数据类型,类定义描述的是表示了什么信息,可以对这些信息执行什么操作
- 类实例(对象)是调用方法的实体
2.4 函数
2.4.1 使用有返回值的函数
- 被调函数、调用函数的概念
- 在使用函数之前,C++编译器需要明确参数类型和函数返回值类型
- 提供参数类型和返回值类型等信息的方式是使用 函数原型语句,C++程序应当为程序中使用的每个函数提供原型,原型格式如下:
double sqrt(double);
原型结尾的分号表示该语句是一个函数原型,函数原型一般写在头文件中;如果去掉分号,那么该语句是一个函数头,而编译器会要求读取该函数头的函数头;函数头一般写在源文件中 - 函数原型只描述函数接口;函数描述函数实现细节
- 使用老式头文件引用
xxx.h
可以同时使用在C和C++中
2.4.2 函数变体
2.4.3 用户定义的函数
- C/C++不允许函数嵌套定义
- main函数的返回值是返回到系统,且main返回0表示程序运行正常,1表示运行发生错误
2.4.4 用户定义的有返回值的函数
- 函数特性包括:函数原型,函数头,函数体,接受参数,返回值
2.4.5 在多函数程序中使用using编译指令
- 当
using namespace std
被放在文件开头处,表示该文件的所有函数都能使用名称空间std中的所有元素 - 当
using namespace std
被放在函数内部,表示只能该函数能够使用名称空间std中的所有元素
该声明作用范围只在该函数;即使该函数内调用了其他函数,而其他函数使用了名称空间中的元素而没有该声明,会报错 - 当
using namespace std
被放在函数内部且放在特定函数前(例如 using std::cout
),那么在该函数内部可以直接调用该特定函数而不加名称空间前缀 - 完全不适用using编译指令,直接在调用名称空间函数前加上名称空间前缀