C++基础教程
C++初级教程
一、C++简介
C++(c plus plus)是一种计算机高级程序设计语言,由C语言扩展升级而产生 ,最早于1979年由本贾尼·斯特劳斯特卢普在AT&T贝尔工作室研发。
C++既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。C++擅长面向对象程序设计的同时,还可以进行基于过程的程序设计。 C++几乎可以创建任何类型的程序:游戏、设备驱动程序、HPC、云、桌面、嵌入式和移动应用等。 甚至用于其他编程语言的库和编译器也使用C++编写。
C++拥有计算机运行的实用性特征,同时还致力于提高大规模程序的编程质量与程序设计语言的问题描述能力。
二、C++ 的使用
C++ 语言在许多行业和领域都有广泛应用,包括:
- 游戏开发:C++ 是游戏开发领域中最常用的编程语言之一,因为它具有高效的性能和直接控制硬件的能力。许多主要的游戏引擎,如 Unreal Engine 和 Unity,都使用 C++ 编写。
- 嵌入式系统开发:C++ 可以在嵌入式系统中发挥重要作用,如智能手机、汽车、机器人和家电等领域。由于嵌入式系统通常具有严格的资源限制和实时要求,因此 C++ 的高效性能和内存控制功能非常有用。
- 金融领域:C++ 在金融领域中被广泛应用,如高频交易、算法交易和风险管理等领域。由于这些应用程序需要高效的性能和对硬件的直接控制,C++ 语言是一个合适的选择。
- 图形图像处理:C++ 可以用于开发图形和图像处理应用程序,如计算机视觉、计算机图形学和人工智能领域。由于这些应用程序需要高效的计算能力和对硬件的控制,因此 C++ 是一个很好的选择。
- 科学计算和数值分析:C++ 可以用于开发科学计算和数值分析应用程序,如数值模拟和高性能计算等领域。由于这些应用程序需要高效的计算能力和对硬件的直接控制,C++ 语言是一个很好的选择。
三、输出Hello world
本教程所有代码均在Dev C++中完成。
1、新建项目
左上角:文件---->>新建---->>项目,选择Empty Project、C++项目,设置项目名为day01,点击确定即可。
2、书写代码
在创建的文件中写下如下代码:
#include<iostream>//引入头文件
using namespace std;//命名空间
int main()//主函数
{
cout<<"Hello world";//cout用于输出内容到控制台
return 0;//返回值
}
代码写好后,点击保存,设置文件的名字。编译并运行代码(F11),得到如下结果:
Hello world
在C语言家族程序中,头文件被大量使用。一般而言,每个C++/C程序通常由头文件和定义文件组成。头文件作为一种包含功能函数、数据接口声明的载体文件,主要用于保存程序的声明,而定义文件用于保存程序的实现。
头文件中包含了常用的一些函数和方法,所以在使用某些特定函数或方法时都需要引入相应的头文件。
主函数是C++程序的入口,所有的函数和方法都需要通过主函数才可以开始执行。而主函数也是唯一的,一个程序只能有一个主函数,如果同时定义了多个主函数,则会报错。
命名空间是一个声明性区域,为其内部的标识符(类型、函数和变量等的名称)提供一个范围。 命名空间用于将代码组织到逻辑组中,还可用于避免名称冲突,尤其是在基本代码包括多个库时。 命名空间范围内的所有标识符彼此可见,而没有任何限制。 命名空间之外的标识符可通过使用每个标识符的完全限定名(例如
std::vector<std::string> vec;
)来访问成员,也可通过单个标识符的 using 声明或命名空间中所有标识符的 using 指令 (using namespace std;
) 来访问成员。 头文件中的代码应始终使用完全限定的命名空间名称。
四、C++关键字
asm | else | new | this |
---|---|---|---|
auto | enum | operator | throw |
bool | explicit | private | true |
break | export | protected | try |
case | extern | public | typedef |
catch | false | register | typeid |
char | float | reinterpret_cast | typename |
class | for | return | union |
const | friend | short | unsigned |
const_cast | goto | signed | using |
continue | if | sizeof | virtual |
default | inline | static | void |
delete | int | static_cast | volatile |
do | long | struct | wchar_t |
double | mutable | switch | while |
dynamic_cast | namespace | template |
五、C++ 标识符
C++ 标识符是用来标识变量、函数、类、模块,或任何其他用户自定义项目的名称。一个标识符以字母 A-Z 或 a-z 或下划线 _ 开始,后跟零个或多个字母、下划线和数字(0-9)。
注意:标识符不能以数字开头,不能包含除下划线(_)以外的其他特殊符号,保留字(关键字)不能作为常量名、变量名或其他标识符名称。
C++ 标识符内不允许出现标点字符,比如 @、& 和 %。C++ 是区分大小写的编程语言。因此,在 C++ 中,Manp 和 manp 是两个不同的标识符。
六、C++ 注释
程序的注释是解释性语句,可以在 C++ 代码中包含注释,这将提高源代码的可读性。所有的编程语言都允许某种形式的注释。程序运行时并不会执行注释部分,注释中的所有字符会被 C++ 编译器忽略。
C++ 支持单行注释和多行注释。C++ 注释一般有两种:
- // : 一般用于单行注释。
- /*** … */** :一般用于多行注释。
注释以 // 开始,直到行末为止。例如:
#include <iostream>
using namespace std;
int main() {
// 这是单行注释
/*
这是多行注释
*/
cout << "Hello World!";
return 0;
}
七、C++的数据类型
C++ 为程序员提供了种类丰富的内置数据类型和用户自定义的数据类型。下表列出了七种基本的 C++ 数据类型:
类型 | 关键字 |
---|---|
布尔型 | bool |
字符型 | char |
整型 | int |
浮点型 | float |
双浮点型 | double |
具体各个数据类型之间的区别会在后续内容进行讲解。
八、C++ 的变量
变量其实只不过是程序可操作的存储区的名称。C++ 中每个变量都有指定的类型,类型决定了变量存储的大小和布局,该范围内的值都可以存储在内存中,运算符可应用于变量上。
1、变量命名规则
变量的名称可以由字母、数字和下划线字符组成。它必须以字母或下划线开头。大写字母和小写字母是不同的,因为 C++ 是大小写敏感的。
2、变量的定义
格式:数据类型 变量名;,例如:
int a;
还可以同时定义多个变量,变量名之间使用","隔开即可,例如:
double a,b,c;
char c1,c2;
3、初始化
初始化,即给变量赋值。
赋值使用“=”,注意这个符号不是等于,是赋值符。
例如:
//定义变量
int a,b,c;
//初始化变量
a = 1;
b = 2;
c = 3;
同时,还可以在定义变量时直接赋值。例如:
//定义变量并直接赋值
int a=1;
int b=2;
//一行中定义多个变量并赋值
double c=1.1,d=2.5,e=3.3;
注意:变量必须要先初始化之后才能参与运算。
九、C++中的运算符
1、算术运算符
运算符 | 描述 |
---|---|
+ | 把两个操作数相加 |
- | 从第一个操作数中减去第二个操作数 |
* | 把两个操作数相乘 |
/ | 把两个操作数相除 |
% | 取模(求余数)运算符,整除后的余数 |
++ | 自增运算符,整数值增加 1 |
– | 自减运算符,整数值减少 1 |
例如:
int a=2,b=3,c=4;
cout<<a+b;// 2+3=5
cout<<a-b;// 2-3=-1
cout<<a*b;// 2*3=6
cout<<a/b;// a/b=0
cout<<a%b;// a%b=2
注意:在C++中,两个整数相除,得到的结果也是整数(对结果进行取整,注意不是四舍五入)。
现有如下代码:
#include<iostream>
using namespace std;
int main()
{
int a=2,b=3;
cout<<a++<<" "<<--b;
return 0;
}
输出结果为:
2 2
这是为什么呢?
在C++中,自增、自减运算符的运算逻辑和运算符的位置有关,也就是说,a++和++a得到的结果是不同的。那运算逻辑是什么呢?
当运算符在变量前时,需要先对变量进行自增或自减,再进行其他运算;如果运算符在变量后,需要先进行其他运算,再对变量进行自增或自减。这也是为什么a++最后的输出结果为2。
例如有如下例子:
#include<iostream>
using namespace std;
int main()
{
int a=2,b=3,c=3,d=2;
cout<<a++<<" "<<--b<<" "<<++c<<" "<<d--;
return 0;
}
结果为:
2 2 4 2
解析:a++运算符在后,先运算,再自增,所以输出结果为2;–b运算符在前,先自减,再运算,所以输出结果为2;++c运算符在前,先自增,再运算,所以输出结果为4;d–运算符在后,先运算,再自减,所以输出结果为2.
当自增、自减运算符参与到复杂的表达式中时,同样遵循以上原则。
2、关系运算符
运算符 | 描述 |
---|---|
== | 检查两个操作数的值是否相等,如果相等则条件为真。 |
!= | 检查两个操作数的值是否相等,如果不相等则条件为真。 |
> | 检查左操作数的值是否大于右操作数的值,如果是则条件为真。 |
< | 检查左操作数的值是否小于右操作数的值,如果是则条件为真。 |
>= | 检查左操作数的值是否大于或等于右操作数的值,如果是则条件为真。 |
<= | 检查左操作数的值是否小于或等于右操作数的值,如果是则条件为真。 |
关系运算符用于比较变量或表达式的大小关系,表达式的结果为布尔值,即真或假。
例如:
#include<iostream>
using namespace std;
int main()
{
int a=2,b=3;
bool f1 = a>b;
bool f2 = a<b;
bool f3 = a==b;
bool f4 = a!=b;
bool f5 = a<=b;
bool f6 = a>=b;
cout<<f1<<" "<<f2<<" "<<f3<<" "<<f4<<" "<<f5<<" "<<f6;
return 0;
}
结果为:
0 1 0 1 1 0
0即为假,1即为真。
3、逻辑运算符
运算符 | 描述 |
---|---|
&& | 称为逻辑与运算符。如果两个操作数都 true,则条件为 true。 |
|| | 称为逻辑或运算符。如果两个操作数中有任意一个 true,则条件为 true。 |
! | 称为逻辑非运算符。用来逆转操作数的逻辑状态,如果条件为 true 则逻辑非运算符将使其为 false。 |
有如下代码:
#include<iostream>
using namespace std;
int main()
{
int a=0,b=1;
bool f1 = a&&b;
bool f2 = a||b;
bool f3 = !a;
cout<<f1<<" "<<f2<<" "<<f3;
return 0;
}
结果为:
0 1 1
4、赋值运算符
运算符 | 描述 | 实例 |
---|---|---|
= | 简单的赋值运算符,把右边操作数的值赋给左边操作数 | C = A + B 将把 A + B 的值赋给 C |
+= | 加且赋值运算符,把右边操作数加上左边操作数的结果赋值给左边操作数 | C += A 相当于 C = C + A |
-= | 减且赋值运算符,把左边操作数减去右边操作数的结果赋值给左边操作数 | C -= A 相当于 C = C - A |
*= | 乘且赋值运算符,把右边操作数乘以左边操作数的结果赋值给左边操作数 | C *= A 相当于 C = C * A |
/= | 除且赋值运算符,把左边操作数除以右边操作数的结果赋值给左边操作数 | C /= A 相当于 C = C / A |
%= | 求模且赋值运算符,求两个操作数的模赋值给左边操作数 | C %= A 相当于 C = C % A |
例如,有如下代码:
#include<iostream>
using namespace std;
int main()
{
int a=2,b=3,c=4,d=5,e=6,f=7;
a+=b; // a=a+b
b-=c; // b=b-c
c*=d; // c=c*d
d/=e; // d=d/e
e%=f; // e=e%f
cout<<a<<" "<<b<<" "<<c<<" "<<d<<" "<<e<<" "<<f;
return 0;
}
结果为:
5 -1 20 0 6 7
5、C++ 中的运算符优先级
运算符的优先级确定表达式中项的组合,这会影响到一个表达式如何计算。某些运算符比其他运算符有更高的优先级,例如,乘除运算符具有比加减运算符更高的优先级。
例如 x = 7 + 3 * 2,在这里,x 被赋值为 13,而不是 20,因为运算符 * 具有比 + 更高的优先级,所以首先计算乘法 3*2,然后再加上 7。
下表将按运算符优先级从高到低列出各个运算符,具有较高优先级的运算符出现在表格的上面,具有较低优先级的运算符出现在表格的下面。在表达式中,较高优先级的运算符会优先被计算。
类别 | 运算符 | 结合性 |
---|---|---|
后缀 | () [] -> . ++ - - | 从左到右 |
一元 | + - ! ~ ++ - - (type)* & sizeof | 从右到左 |
乘除 | * / % | 从左到右 |
加减 | + - | 从左到右 |
移位 | << >> | 从左到右 |
关系 | < <= > >= | 从左到右 |
相等 | == != | 从左到右 |
位与 AND | & | 从左到右 |
位异或 XOR | ^ | 从左到右 |
位或 OR | | | 从左到右 |
逻辑与 AND | && | 从左到右 |
逻辑或 OR | || | 从左到右 |
条件 | ?: | 从右到左 |
赋值 | = += -= *= /= %=>>= <<= &= ^= |= | 从右到左 |
逗号 | , | 从左到右 |
在复杂的表达式中,可能会同时涉及到多个不同的运算符,这时候就需要考虑运算符的优先级,根据优先级来计算最终的结果。例如:
#include<iostream>
using namespace std;
int main()
{
int a=2,b=3,c=4,d=5,e=6,f=7;
int g=a*b+c%f+(++d>=e&&e<f)-f++;
cout<<g;
return 0;
}
结果为:
4