目录
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);