1. 初始 C++
1.1 第一个 C++ 程序
编写一个 C++ 程序总共分为 4 个步骤:
- 创建项目
- 创建文件
- 编写代码
- 运行文件
1.1.1 创建项目
Visual Studio 是我们用来编写 C++ 程序的主要工具,我们先将它打开。
选择 空项目,确定 项目名称 和 项目路径。
1.1.2 创建文件
右击源文件,选择 添加->新建项->cpp 文件,给 cpp 文件起个名称,点击添加即可。
1.1.3 编写代码
#include <iostream>
using namespace std;
int main() {
cout << "hello abc" << endl;
system("pause");
return 0;
}
1.1.4 运行程序
CTRL + F5 开始执行程序。
1.2 注释
同 C 语言。
1.3 变量
同 C 语言。
1.4 常量
同 C语言。
1.5 关键字
作用:关键字是 C++ 中预先保留的单词(标识符)
- 在给变量或者常量起名称的时候,不要用关键字,否则会产生歧义。
C++ 关键字如下:
asm | do | if | return | typedef |
---|---|---|---|---|
auto | double | inline | short | typeid |
bool | dynamic_cast | int | signed | typename |
break | else | long | sizeof | union |
case | enum | mutable | static | unsigned |
catch | explicit | namespace | static_cast | using |
char | export | new | struct | virtual |
class | extern | operator | switch | void |
const | false | private | template | volatile |
const_cast | float | protected | this | wchar_t |
continue | for | public | throw | while |
default | friend | register | true | |
delete | goto | reinterpret_cast | try |
1.6 标识符命名规则
同 C 语言。
2. 数据类型
2.1 整型
同 C 语言。
2.2 sizeof 关键字
同 C 语言。
2.3 浮点型(实型)
同 C 语言。
C++ 中浮点数特点:
- 默认情况下浮点数是 double 类型,在浮点数的末尾加上 f 后 浮点数为 float 类型。
- 在 C++ 中输出一个浮点数,默认会显示 6 位有效数字。
2.4 字符型
同 C 语言。
2.5 转义字符
同 C 语言。
2.6 字符串型
作用:用于表示一串字符
两种风格:
- C风格字符串: char 变量名[ ] = “字符串值”;
示例:char str1[] = "hello abc";
- C++风格字符串: string 变量名 = “字符串值”;
示例:string str2= "hello abc";
注意: C++风格的字符串,需要加入头文件 #include <string.h>。
2.7 布尔类型 bool
作用:布尔数据类型代表 真 或 假 的值。
bool 类型只有两个值:
- true — 真(本质是 1)
- false — 假(本质是 0)
bool flag = true;
cout << sizeof(bool) << endl;//1
bool 类型占 1 个字节大小。
2.8 数据的输入
作用:用于从键盘获取数据
关键字:cin
语法:cin >> 变量
示例:
int main() {
int a = 0;
cout << "请输入整型变量:" << endl;
cin >> a;
cout << a << endl;
system("pause");
return 0;
}
bool 类型只要是 非 0 的值 都代表真。
3. 运算符
同 C 语言。
4. 程序设计结构
C/C++支持最基本的三种程序运行结构:顺序结构、选择结构、循环结构
- 顺序结构:程序按顺序执行,不发生跳转
- 选择结构:依据条件是否满足,有选择地执行相应功能
- 循环结构:依据条件是否满足,循环多次执行某段代码
4.1 选择结构
4.1.1 if 语句
同 C 语言。
4.1.2 三目操作符
同 C 语言。
4.1.3 switch 语句
同 C 语言。
4.2 循环结构
4.2.1 while 循环语句
同 C 语言。
4.2.2 do while 循环语句
同 C 语言。
4.2.3 for 循环语句
同 C 语言。
4.2.4 嵌套循环
同 C 语言。
4.3 跳转语句
4.3.1 break 语句
作用:用于跳出选择语句或者循环语句
break 使用的时机:
- 出现在 switch 条件语句中,作用是终止 case 并跳出 switch
- 出现在循环语句中,作用是跳出当前的循环语句
- 出现在嵌套循环中,跳出最近的内层循环语句
示例:
#include <iostream>
using namespace std;
int main() {
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
if (j == 5) {
break;
}
cout << "* ";
}
cout << endl;
}
system("pause");
return 0;
}
4.3.2 continue 语句
作用:在循环语句中,跳出本次循环中剩下尚未执行的语句,继续执行下一次循环。
示例:
#include <iostream>
using namespace std;
int main() {
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
if (j % 2 == 0) {
continue;
}
cout << "* ";
}
cout << endl;
}
system("pause");
return 0;
}
4.3.3 goto 语句
同 C 语言。
5. 数组
5.1 概述
同 C 语言。
5.2 一维数组
5.2.1 一维数组的定义方式
一维数组定义的三种方式:
- 数据类型 数组名[ 数组长度 ];
- 数据类型 数组名[ 数组长度 ] = { 值1,值2,…… };
- 数据类型 数组名[ ] = { 值1,值2,…… };
1.
int arr1[3];
arr1[0] = 10;
arr1[1] = 20;
arr1[2] = 30;
2.
int arr2[5] = { 10, 20, 30 };//不完全定义用 0 补全
3.
int arr3[] = { 10, 20, 30 };
- 数据名的命名规范与变量名命名规范一致,不要和变量重名
- 数组中下标是从 0 开始索引
5.2.2 一维数组的数组名
同 C 语言。
数组名是地址,是常量,不可以进行赋值操作。如:
arr1 = 100;
5.2.3 冒泡排序
同 C 语言。
5.3 二维数组
二维数组就是在一维数组上,多加一个维度。
5.3.1 二维数组的定义方式
二维数组定义的四种方式:
- 数据类型 数组名[ 行数 ][ 列数 ];
- 数据类型 数组名[ 行数 ][ 列数 ] = { { 数据1, 数据2 }, { 数据3, 数据4 } };
- 数据类型 数组名[ 行数 ][ 列数 ] = { 数据1, 数据2, 数据3, 数据4 };
- 数据类型 数组名[ ][ 列数 ] = { 数据1, 数据2, 数据3, 数据4 };
建议:以上 4 种定义方式,利用第二种更加直观,提高代码的可读性。
1.
int arr1[2][2];
arr1[0][0] = 10;
arr1[0][1] = 20;
arr1[1][0] = 30;
arr1[1][1] = 40;
2.
int arr2[2][2] = { {10, 20}, {30, 40} };
3.
int arr3[2][2] = { 10, 20, 30, 40 };
4.
int arr4[][2] = { 10, 20, 30, 40 };
for (int i = 0; i < 2; i++) {//外层循环打印行数
for (int j = 0; j < 2; j++) {//内层循环打印列数
cout << arr[i][j] << " ";
}
cout << endl;
}
在定义二维数组时,如果初始化了数据,可以省略行数。但是列数不能省略。
5.3.2 二维数组的数组名
同 C 语言。
5.3.3 二维数组应用案例
考试成绩统计:已知三名同学在一次考试中的三门成绩,请分别输出三名同学的总成绩。
#include <iostream>
using namespace std;
int main() {
//创建二维数据,统计考试成绩
int scores[3][3] = { {100,100,100},{90,50,100},{60,70,80} };
for (int i = 0; i < 3; i++) {
int sum = 0;//统计每个同学的总成绩
for (int j = 0; j < 3; j++) {
sum += scores[i][j];
}
cout << "第" << i + 1 << "个人的总分为:" << sum << endl;
}
system("pause");
return 0;
}
6. 函数
6.1 函数的概述
同 C 语言。
6.2 函数的定义
同 C 语言。
6.3 函数的调用
同 C 语言。
6.3.1 值传递
同 C 语言
6.4 函数的常见样式
常见的函数样式有 4 种:
- 无参无返
- 有参无返
- 无参有返
- 有参有返
无类型不可以创建变量(
void a = 10;
?),原因无法分配内存。
6.5 函数的声明
作用:告诉编译器函数名称(函数的存在)及如何调用函数。函数的实际主体可以单独定义。(同 C 语言)
- 函数的声明可以多次,但是函数的定义只能有一次。
//声明可以多次
int max(int a, int b);
int max(int a, int b);
//定义只有一次
int max(int a, int b) {
return a > b ? a : b;
}
6.6 函数的分文件编写
作用:让代码结构更加清晰
函数的分文件编写一般有 4 个步骤:
- 创建后缀名为 .h 的头文件
- 创建后缀名为 .cpp 的源文件
- 在头文件中写函数的声明
- 在源文件中写函数的定义
示例:
//max.h 文件
#include <iostream>
using namespace std;
//实现求两个数字最大值的函数声明
int max(int a, int b);
//max.cpp 文件
#include "max.h"
//实现求两个数字最大值的函数定义
void max(int a, int b) {
return a > b ? a : b;
}
最终,在主函数的源文件头部 #include <max.h>
7. 指针
7.1 指针的基本概念
同 C 语言。
7. 2 指针变量的定义和使用
同 C 语言。
7.3 指针所占的内存空间
同 C 语言。
7.4 空指针和野指针
同 C 语言。
7.5 const 修饰指针
同 C 语言。
7.6 指针和数组
同 C 语言。
7.7 指针和函数
作用:利用指针作为函数参数,可以修改实参的值。(传址调用原理)
8. 结构体
8.1 结构体基本概念
同 C 语言。
8.2 结构体定义和使用
同 C 语言。
C++ 结构体特点:
- 定义结构体时的关键字是 struct,不可省略
- 创建结构体变量时,关键字 struct 可以省略
8.3 结构体数组
作用:将自定义的结构体放入到数组中方便维护
语法:struct 结构体名 数组名[元素个数] = {{}, {}, ..., {}};
示例:
//结构体定义
struct student {
//成员列表
string name;//姓名
int age; //年龄
int score; //分数
}
//创建结构体数组
struct student arr[3] =
{
{ "张三", 18, 80},
{ "李四", 20, 60},
{ "王五", 19, 100}
};
//给结构体数组中元素赋值
arr[2].name = "赵六";
arr[2].age= 21;
arr[2].score= 90;
//遍历结构体数组
for (int i = 0; i < 3; i++) {
cout << arr[i].name << " " << arr[i].age << " " << arr[i].score << endl;
8.4 结构体指针
同 C 语言。
8.5 结构体嵌套
同 C 语言。
8.6 结构体做函数参数
同 C 语言。