C++ 是什么
C++ 是一种强大的编程语言,它的历史可以追溯到 20 世纪 70 年代末。当时,计算机科学家比雅尼・斯特劳斯特鲁普(Bjarne Stroustrup)在贝尔实验室工作,他希望扩展 C 语言以支持面向对象编程(OOP),最初的工作被称为'C with Classes',这是 C 语言的一个扩展,引入了类的概念。1983 年,该语言被正式命名为 C++,并在 1985 年正式发布。C++ 从 C 语言发展而来,继承了 C 语言的高效和灵活性,同时引入了面向对象编程的特性,如类、对象、封装、继承和多态等,使得代码的组织和维护更加容易。随着时间的推移,C++ 不断发展和完善,引入了更多的特性,如模板、异常处理、智能指针等,使其成为一种功能强大、应用广泛的编程语言。
C++ 以其卓越的性能和对硬件的直接控制能力,在众多领域中占据着不可或缺的地位。在系统软件领域,操作系统、编译器、数据库管理系统等的核心部分常常由 C++ 编写,因为它能够充分发挥硬件的性能优势,实现高效的数据处理和资源管理。以 Windows 操作系统为例,其内核部分大量使用 C++ 编写,确保了系统的稳定性和高效运行。在游戏开发领域,C++ 更是成为了首选语言。像《使命召唤》《古墓丽影》等大型 3A 游戏,其游戏引擎和核心逻辑都依赖于 C++ 的高性能和对硬件的直接访问能力,从而实现了逼真的图形渲染、流畅的游戏体验以及复杂的物理模拟效果。在嵌入式系统中,C++ 同样表现出色。从智能家居设备到工业控制系统,由于其资源有限,对程序的性能和资源占用要求极高,C++ 能够精确控制硬件资源,满足这些严格的要求。例如,汽车的电子控制系统、智能手表的底层驱动程序等,都离不开 C++ 的支持。在高性能计算、金融科技、人工智能等领域,C++ 也都有着广泛的应用,为这些领域的发展提供了强大的技术支持。
搭建开发环境
在开始编写 C++ 代码之前,我们需要搭建一个合适的开发环境。C++ 开发环境主要包括编译器和集成开发环境(IDE)。编译器用于将我们编写的 C++ 代码转换为计算机能够执行的机器代码,而 IDE 则提供了一个集成的开发平台,包括代码编辑、编译、调试等功能,大大提高了开发效率。
常见的 IDE 介绍
1. Visual Studio:由微软开发,是一款功能强大、综合性的 IDE,广泛应用于 Windows 平台的 C++ 开发。它支持 C++ 的各种特性,包括最新的 C++ 标准,并且提供了丰富的代码智能提示、调试工具、代码分析等功能。对于 Windows 桌面应用开发、游戏开发、企业级应用开发等场景,Visual Studio 是一个非常好的选择。它与 Windows 操作系统和其他微软技术紧密集成,能够方便地使用 Windows API 和其他微软服务。例如,在开发 Windows 桌面应用时,可以直接利用 Visual Studio 的项目模板快速创建应用框架,然后通过代码智能提示和调试工具进行开发和调试。
2. Code::Blocks:是一款开源、跨平台的 C++ IDE,具有轻量级、易于使用的特点。它支持多种编译器,如 GCC、Clang 等,并且提供了基本的代码编辑、编译、调试功能。Code::Blocks 适合初学者和对 IDE 功能要求不高的开发者,尤其是在 Linux 和 Windows 平台上进行简单的 C++ 项目开发。它的安装和配置相对简单,能够快速搭建起一个 C++ 开发环境。例如,在学习 C++ 基础语法时,可以使用 Code::Blocks 快速编写和运行代码,验证学习成果。
3. CLion:由 JetBrains 开发,是一款智能、现代化的 C++ IDE,专为 C 和 C++ 开发设计。它具有强大的代码分析和重构功能,能够帮助开发者快速定位和解决代码中的问题,提高代码质量。CLion 支持跨平台开发,并且与版本控制系统(如 Git)集成良好,方便团队协作开发。对于专业的 C++ 开发者和大型项目开发,CLion 是一个非常优秀的选择。例如,在开发大型游戏引擎或高性能服务器端应用时,CLion 的代码分析和重构功能能够大大提高开发效率和代码的可维护性。
安装步骤与简单配置
以 Visual Studio 为例,介绍其安装步骤和简单配置:
1. 下载安装包:访问微软官方网站(https://visualstudio.microsoft.com/),点击'下载'按钮,选择适合你操作系统版本的 Visual Studio 安装包进行下载。
2. 运行安装程序:下载完成后,双击安装包,启动安装程序。在安装向导中,选择'继续',安装程序会自动下载并安装所需的组件。
3. 选择工作负载:在安装过程中,你可以选择需要安装的工作负载。对于 C++ 开发,选择'使用 C++ 的桌面开发'工作负载,然后点击'安装'。安装程序会下载并安装 C++ 开发所需的工具和库,这个过程可能需要一些时间,取决于你的网络速度和计算机性能。
4. 启动 Visual Studio:安装完成后,启动 Visual Studio。首次启动时,需要选择开发设置和颜色主题,然后点击'启动 Visual Studio'。
5. 配置项目属性:在创建项目后,可以通过右键点击项目名称,选择'属性'来配置项目属性。例如,可以设置 C++ 标准版本、编译器优化选项、链接库路径等。在'C/C++' -> '语言'选项中,可以选择使用的 C++ 标准,如 C++17、C++20 等。
创建和运行 C++ 项目
1. 创建新项目:打开 Visual Studio,点击'文件' -> '新建' -> '项目',在弹出的对话框中选择'控制台应用',然后点击'下一步'。输入项目名称和位置,点击'创建'。
2. 编写代码:在解决方案资源管理器中,右键点击'源文件',选择'添加' -> '新建项',在弹出的对话框中选择'C++ 文件 (.cpp)',输入文件名,点击'添加'。在新建的.cpp 文件中,编写 C++ 代码,例如:
#include <iostream>
int main() {
std::cout << "Hello, World!" << std::endl;
return 0;
}
3. 运行项目:点击菜单栏中的'调试' -> '开始执行 (不调试)',或者按下快捷键 Ctrl + F5,即可运行项目。在输出窗口中,可以看到程序的运行结果。如果程序中有错误,编译器会在错误列表中显示错误信息,你可以根据错误信息修改代码。
基础语法入门
变量与数据类型
在 C++ 中,数据类型决定了变量在内存中的存储方式以及可以执行的操作。C++ 支持多种基本数据类型,这些基本数据类型是构建复杂数据结构的基础。
1. 整型:用于表示整数,包括有符号和无符号整数。常见的整型类型有 int(通常占用 4 个字节,取值范围根据系统不同而有所差异,一般为 -2147483648 到 2147483647)、short(通常占用 2 个字节,取值范围为 -32768 到 32767)、long(通常占用 4 个字节或 8 个字节,取值范围至少为 -2147483648 到 2147483647)和 long long(通常占用 8 个字节,取值范围为 -9223372036854775808 到 9223372036854775807)。例如:
int num1 = 10;
short num2 = 20;
long num3 = 30L;
long long num4 = 40LL;
2. 浮点型:用于表示带有小数点的数值,分为单精度 float 和双精度 double。float 通常占用 4 个字节,精度较低,有效数字大约为 6 - 7 位;double 通常占用 8 个字节,精度较高,有效数字大约为 15 - 17 位。还有 long double,它提供更高的精度,占用的字节数因系统而异。例如:
float f1 = 3.14f;
double d1 = 3.14159;
long double ld1 = 3.14159265358979323846L;
3. 字符型:用于表示单个字符,使用 char 类型,通常占用 1 个字节。字符型变量可以存储 ASCII 码表中的字符,也可以存储 Unicode 字符。例如:
char ch = 'A';
4. 布尔型:用于表示逻辑值,只有 true 和 false 两个值,使用 bool 类型,通常占用 1 个字节。例如:
bool flag = true;
变量的定义和初始化是使用变量的基础。在 C++ 中,定义变量时需要指定变量的类型,然后可以选择对变量进行初始化。初始化是在变量定义时给它赋一个初始值。例如:
int a = 5; // 定义一个整型变量 a,并初始化为 5
double b; // 定义一个双精度浮点型变量 b,未初始化
b = 3.14; // 给变量 b 赋值
变量的作用域是指变量在程序中有效的范围。在 C++ 中,变量的作用域可以分为局部作用域、全局作用域、类作用域等。局部变量是在函数内部定义的变量,它的作用域仅限于函数内部,当函数结束时,局部变量会被销毁。例如:
void test() {
int localVar = 10; // localVar 是局部变量,作用域仅限于 test 函数内部
// 可以在 test 函数内部使用 localVar
}
// 这里不能使用 localVar,因为它已经超出了作用域
全局变量是在函数外部定义的变量,它的作用域从定义处开始,到整个程序结束。全局变量在程序的任何地方都可以访问,但是过多使用全局变量可能会导致代码的可读性和可维护性下降。例如:
int globalVar = 20; // globalVar 是全局变量
void anotherTest() {
// 可以在 anotherTest 函数中使用 globalVar
std::cout << "Global variable: " << globalVar << std::endl;
}
运算符与表达式
运算符是 C++ 中用于执行各种操作的符号,它们可以对变量或值进行运算,并返回结果。表达式则是由运算符、操作数和函数调用等组成的式子,它代表一个值或动作。C++ 支持多种运算符,包括算术运算符、赋值运算符、比较运算符、逻辑运算符等。
1. 算术运算符:用于执行基本的数学运算,如加法(+)、减法(-)、乘法(*)、除法(/)和取模(%)。例如:
int a = 10;
int b = 3;
int sum = a + b; // 加法运算,sum 的值为 13
int difference = a - b; // 减法运算,difference 的值为 7
int product = a * b; // 乘法运算,product 的值为 30
int quotient = a / b; // 除法运算,quotient 的值为 3,因为是整数除法,会截断小数部分
int remainder = a % b; // 取模运算,remainder 的值为 1
需要注意的是,在进行除法运算时,如果两个操作数都是整数,结果将是整数,会截断小数部分。如果需要得到精确的小数结果,至少有一个操作数应该是浮点数。例如:
float f1 = 10.0f;
int i1 = 3;
float result = f1 / i1; // result 的值为 3.333333
2. 赋值运算符:用于给变量赋值,最基本的赋值运算符是=。除此之外,还有复合赋值运算符,如+=、-=、*=、/=、%=等。复合赋值运算符是将算术运算和赋值运算结合在一起,使代码更加简洁。例如:
int num = 5;
num += 3; // 等价于 num = num + 3,num 的值变为 8
num *= 2; // 等价于 num = num * 2,num 的值变为 16
3. 比较运算符:用于比较两个表达式的值,并返回一个布尔值(true 或 false)。常见的比较运算符有等于(==)、不等于(!=)、大于(>)、小于(<)、大于等于(>=)和小于等于(<=)。例如:
int a = 10;
int b = 5;
bool result1 = (a == b); // 比较 a 和 b 是否相等,result1 的值为 false
bool result2 = (a != b); // 比较 a 和 b 是否不相等,result2 的值为 true
bool result3 = (a > b); // 比较 a 是否大于 b,result3 的值为 true
bool result4 = (a < b); // 比较 a 是否小于 b,result4 的值为 false
bool result5 = (a >= b); // 比较 a 是否大于等于 b,result5 的值为 true
bool result6 = (a <= b); // 比较 a 是否小于等于 b,result6 的值为 false
4. 逻辑运算符:用于执行逻辑运算,返回一个布尔值。常见的逻辑运算符有逻辑与(&&)、逻辑或(||)和逻辑非(!)。逻辑与运算符只有当两个操作数都为 true 时,结果才为 true;逻辑或运算符只要有一个操作数为 true,结果就为 true;逻辑非运算符用于取反操作数的逻辑值。例如:
bool a = true;
bool b = false;
bool result1 = (a && b); // 逻辑与运算,result1 的值为 false
bool result2 = (a || b); // 逻辑或运算,result2 的值为 true
bool result3 = (!a); // 逻辑非运算,result3 的值为 false
逻辑运算符遵循短路求值原则,即对于逻辑与运算,如果第一个操作数为 false,则不会计算第二个操作数;对于逻辑或运算,如果第一个操作数为 true,则不会计算第二个操作数。例如:
int num = 5;
// 在这个逻辑与表达式中,如果 num <= 10 为 false,就不会执行 num++ 操作
if (num <= 10 && num++) {
// 这里的代码只有在 num <= 10 为 true 时才会执行
}
控制结构
控制结构是 C++ 中用于控制程序执行流程的语句,它们允许根据条件来决定执行哪些代码块,或者重复执行一段代码。C++ 提供了多种控制结构,包括条件语句(if - else、switch - case)和循环语句(for、while、do - while)。
1. 条件语句
if - else 语句:根据条件的真假来决定执行不同的代码块。if 语句后面跟着一个条件表达式,如果条件表达式的值为 true,则执行 if 语句块中的代码;否则,如果有 else 语句,则执行 else 语句块中的代码。例如:
int num = 10;
if (num > 5) {
std::cout << "The number is greater than 5" << std::endl;
} else {
std::cout << "The number is less than or equal to 5" << std::endl;
}
if - else 语句还可以嵌套使用,用于处理更复杂的条件判断。例如:
int score = 85;
if (score >= 90) {
std::cout << "Grade: A" << std::endl;
} else if (score >= 80) {
std::cout << "Grade: B" << std::endl;
} else if (score >= 70) {
std::cout << "Grade: C" << std::endl;
} else {
std::cout << "Grade: D" << std::endl;
}
switch - case 语句:用于根据一个表达式的值来选择执行不同的代码块。switch 语句后面跟着一个表达式,然后是多个 case 分支,每个 case 分支后面跟着一个常量表达式和一段代码。当 switch 表达式的值与某个 case 常量表达式的值相等时,就执行该 case 分支中的代码。例如:
int day = 3;
switch (day) {
case 1:
std::cout << "Monday" << std::endl;
break;
case 2:
std::cout << "Tuesday" << std::endl;
break;
case 3:
std::cout << "Wednesday" << std::endl;
break;
case 4:
std::cout << "Thursday" << std::endl;
break;
case 5:
std::cout << "Friday" << std::endl;
break;
case 6:
std::cout << "Saturday" << std::endl;
break;
case 7:
std::cout << "Sunday" << std::endl;
break;
default:
std::cout << "Invalid day number" << std::endl;
break;
}
每个 case 分支执行完后,通常需要使用 break 语句来跳出 switch 结构,否则会继续执行下一个 case 分支。default 分支用于处理 switch 表达式的值与所有 case 常量表达式的值都不匹配的情况。
2. 循环语句
for 循环:用于执行一段代码指定的次数。for 循环的语法结构为 for (初始化表达式; 条件表达式; 迭代表达式) { 循环体 }。初始化表达式用于初始化循环变量,条件表达式用于判断是否继续循环,迭代表达式用于更新循环变量的值。例如:
for (int i = 1; i <= 5; i++) {
std::cout << "Value of i: " << i << std::endl;
}
在这个例子中,循环变量 i 从 1 开始,每次循环后 i 的值加 1,直到 i 大于 5 时,循环结束。
while 循环:只要条件表达式的值为 true,就会重复执行循环体中的代码。while 循环的语法结构为 while (条件表达式) { 循环体 }。例如:
int i = 1;
while (i <= 5) {
std::cout << "Value of i: " << i << std::endl;
i++;
}
在这个例子中,首先判断 i 是否小于等于 5,如果是,则执行循环体中的代码,然后 i 的值加 1,再次判断条件,直到 i 大于 5 时,循环结束。
do - while 循环:先执行一次循环体,然后再判断条件表达式的值。如果条件表达式的值为 true,则继续执行循环体,否则结束循环。do - while 循环的语法结构为 do { 循环体 } while (条件表达式);。例如:
int i = 1;
do {
std::cout << "Value of i: " << i << std::endl;
i++;
} while (i <= 5);


