既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
- [编译器](#_79)
- [工作原理](#_95)
- [学习指南](#_99)
- * [入门书籍](#_101)
* [进阶书籍](#_113)
* [算法、竞赛书籍](#_127)
+ [教程](#_136)
+ - [标准构建](#_138)
- * [程序解释](#_150)
- [第一个C++程序——“hello world”](#Chello_world_154)
- * [编译](#_171)
- [C++基础语法](#C_194)
- * [输入与输出](#_196)
* [C++风格](#C_200)
* [C风格](#C_219)
* [变量](#_242)
* + [全局变量](#_246)
+ [局部变量](#_266)
+ [常量](#_282)
* [注释](#_302)
* [C++关键字、保留字](#C_325)
* [C++数据类型](#C_347)
* + [数字类型](#_351)
+ - [整形](#font_color__ff0000font_355)
- [浮点型](#font_colorff0000font_403)
+ [布尔类型](#_432)
+ [字符类型](#_443)
+ [小测试](#_453)
* [运算符](#_474)
* + [算术运算符](#_489)
+ - [实例](#_505)
- [实例](#_511)
+ [关系运算符](#_546)
+ - [实例](#_561)
- [实例](#_567)
+ [逻辑运算符](#_613)
+ - [实例](#_625)
- [实例](#_631)
- [数组](#_672)
- * [声明数组](#_682)
* [初始化数组](#_698)
* [访问数组元素](#_724)
* + [实例](#_734)
- [字符串](#_769)
- [控制语句](#_798)
- * [循环 2021.2.7补](#_202127_800)
* + [for 2021.2.7补](#for_202127_802)
+ [while 2021.2.8补](#while_202128_905)
* [判断分支 2021.2.8补](#_202128_909)
- [函数](#_913)
- * [定义函数](#_925)
* [2021/2/7更新,继续写函数](#202127_945)
* [2021/2/7更新,标准库函数](#202127_1003)
+ [C++ 基本中的基础算法](#C__1011)
+ - [找数组中最大值(及最小值)](#_1013)
- [排序数组(简单算法——选择排序、冒泡排序、sort函数)](#sort_1015)
+ [C++标准库](#C_1017)
+ - [STL](#STL_1019)
+ [小练习题](#_1021)
+ - * [命名空间using namespace std](#using_namespace_std_1042)
+ [对于C++的常见答疑(来自百度百科)](#C_1046)
+ [入门课程推荐](#_1095)
持续更新……
C++教程
首发于2020/3/14
更新开始于2021/2/6,改名以及补充,原名:C++新手基础教程,必备!必看!最全手写教程
前言
C++是一门古老的语言,C++是C语言的继承,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。C++擅长面向对象程序设计的同时,还可以进行基于过程的程序设计,因而C++就适应的问题规模而论,大小由之。看得懂看,看不懂跳过😃
我会尽量讲的简单一些😺,在这里尽微薄之力帮助更多人在闲暇时间看一看学学C++的知识。
C++不仅拥有计算机高效运行的实用性特征,同时还致力于提高大规模程序的编程质量与程序设计语言的问题描述能力。
- 中文名:C++语言
- 外文名:The C++ Programming Language/c plus plus
- 类 别:计算机程序设计语言
- 创始人:Bjarne Stroustrup
- 创始公司:贝尔实验室
- 基本内容:类、封装、重载、继承、模版
世界上第一种计算机高级语言是诞生于1954年的FORTRAN语言。之后出现了多种计算机高级语言。1970年,AT&T的Bell实验室的D.Ritchie和K.Thompson共同发明了C语言。研制C语言的初衷是用它编写UNIX系统程序,因此,它实际上是UNIX的“副产品”。它充分结合了汇编语言和高级语言的优点,高效而灵活,又容易移植。
视频教程
BTW:如果想入门C++,可以点下面这个网站看视频教程,我当初就是跟他们的老师入门的。
http://www.csai.online/course/explore/B02
文字教程
推荐两个比较好的教程网站
w3cschool:https://www.w3cschool.cn/cpp/
runoob菜鸟教程:https://www.runoob.com/cplusplus/cpp-intro.html
集成开发环境(IDE)
编写程序需要工具,代码需要有不同的颜色,叫代码高亮,大体有两种工具——文本编辑器和IDE,文本编辑器就是只提供代码高亮,工具较少,所以下载大小比较小。通常有Notepad++、EMACS、Vim、sublime Text2和Xcode等。但是IDE的功能就全面了,对于开发人员来说,IDE对于开发的帮助是巨大的。
Visual Studio (Visual C++)
C++ Builder
kDevelop
Anjuta
Code::Blocks——开放源码的全功能的跨平台C/C++集成开发环境 。
Visual Mingw
Ideone
Eclipse CDT
Compilr
Code Lite
Netbeans C++
上面就是一个个IDE,我最常用的是Visual Studio。
编译器
编译器是为了让计算机读懂代码的工具,必须下载。
Dev C++
Ultimate++
Digital Mars
C-Free
MinGW
Tiny C Compiler
工作原理
C++语言的程序因为要体现高性能,所以都是编译型的。但其开发环境,为了方便测试,将调试环境做成解释型的。即开发过程中,以解释型的逐条语句执行方式来进行调试,以编译型的脱离开发环境而启动运行的方式来生成程序最终的执行代码。
学习指南
入门书籍
《C++程序设计教程》,钱能
《易学C++》,潘嘉杰
《大话设计模式》,程杰
《C++编程规范:101条规则、准则与最佳实践》,刘基诚
《C和C++程序员面试秘籍》,董山海
进阶书籍
《C++程序设计语言》英文第四版,Bjarne Stroustrup
《C++ Primer 第5版(英文版)》,Stanley Lippman、Josee Laoie、Barbara Moo
《C++标准库:自学教程与参考手册(第2版)(英文版)》,Nicolai Josuttis
《C++ Concurrency in Action|C++ 并发实战》,Anthony Wiliams
《C和C++安全编码(第2版)(英文版)》,Robert Seacord
《C++ Primer Plus》
算法、竞赛书籍
《数据结构与算法分析,C语言描述》[美]马克·艾伦·维斯 著
《数据结构(C语言版)》 清华大学出版社
《算法竞赛 入门到进阶》 清华大学出版社
教程
标准构建
#include <iostream>
using namespace std;
int main(){
return 0;
}
上面的程序是一个标准的c++程序,什么都不干。
程序解释
第一句:#include <iostream>
是一个预处理语句,在#include
后面可以调用c++标准库,基础的c++程序定义一个iostream
是标准输入输出流,第二行using namespace std;
可以先不用管,只要记住就行。后面的int main()
是定义一个函数,int
是返回值类型,main()
是函数名,以后将自定义函数的时候会仔细讲,main()
是主函数,不可以改名!后面的{}一对大括号括起来的地方就是你写代码的地方了。return 0;
是代表程序结束的地方,叫返回值,返回值的默认值是0,不可以改!
第一个C++程序——“hello world”
我们弄明白了标准构建就可以写带有功能的代码了😜,这种代码叫做源代码。任何语言的第一步都是输出“hello world”,C++也一样,让我们开始吧?!
写代码前先得有一个IDE或者文本编辑器
新手我建议使用Dev-Cpp,因为Dev-Cpp有自带编译器,不用下载编译器了,😜
#include <iostream>
using namespace std;
int main() {
cout << "hello world" << endl;
return 0;
}
把这段代码写下来
编译
编译是什么?是把你写出的代码转化成电脑💻可以读懂的代码。首先会转成汇编,再转成机器码,计算机就明白了。
怎么编译?(用Dev-Cpp)
这是你的代码对不对?
然后按上图的灰色片可以新建源代码,黄色的是保存,保存你的代码到你想保存的位置,往右看🙈看到一个四格格的图标,是编译,点击会弹出一个框,如下图,等它停下来就编译完成,点击编译左边的另一个灰色片片,点击就运行了,如果想简单点,直接点击运行右边的编译运行,就一体化了。
运行后弹出一个黑色的框,输出“hello world”,成功!💪
这个代码只有一个新的地方cout << “hello world" << endl;
,我们分析一下,cout是什么意思?cout是输出到控制台(终端),<<
是输出流符号,""
这是代表字符串,输出一个hello world的字符串,最后endl是回车的意思,输出换行,最后分号;每行都要有;
C++基础语法
输入与输出
尽管C和C++已经很相似了,不过还是有略微差别……
C++风格
c++的输入与输出相对简单,但是有些功能会缺失,所以c++中也支持C语言的输入与输出
实例:
#include <iostream>
using namespace std;
int main(){
int aNum;
cin >> aNum;
cout << "aNum:" << aNum << endl;
return 0;
}
程序第一行的#include <iostream>
大家都还记得吧?这个iostream就是为了cin和cout,当然还有其他功能,都是相对高级,所以这里不说🙂,第4行定义了一个整形变量aNum,下面有讲解变量,第5行cin是输入标识符,>>是输入流符号,cout是输出标识符,<<是输出流符号。简单吧
C风格
C风格的相对难些,不过应该可以看懂,C风格的输入输出补全了C++的一些(cout,cin)小问题。
实例(C语言):看得懂看,看不懂跳过
int aNum;
scanf("%d", &aNum);
printf("%d\n", aNum);
结果:
输入:
5
输出:
5
应该可以看出来,scanf是输入,printf是输出,“”双引号内是确定输出格式的语句,,
后面就是输出中切入的变量参数。看不懂可以跳过,参考:菜鸟教程<-想学的话猛戳
变量
C++中可以有变量
全局变量
全局变量顾名思义,整个文件可用,通常用来声明常量,定义位置:命名空间(using namespace std;
)下面,具体方法见下面实例:
#include <iostream>
using namespace std;
int n = 10;
void out(){
cout << n << endl; //自定义函数,下面讲
//函数中可用
}
int main(){
cout << n << endl;//every where可用
return 0;
}
懂了吧
局部变量
有是顾名思义
#include <iostream>
using namespace std;
void func(){
cout << n << endl;//报错,找不到n
}
int main(){
int n = 10;
cout << n << endl;
}
常量
还是顾名思义,常量就是不能改变的量,用保留字const
定义,实例:
#include <iostream>
using namespace std;
const int an = 100;
int main(){
//常量可以定义在任何地方
cout << an << endl;//输出100
const long long int aln = 200;
cout << aln << endl;//输出200
aln = 100;//报错,不可篡改常量
return 0;
}
注释
程序中适当的注释可以美化程序,使得程序更加清晰,简单明了,C++同样支持注释,下面来介绍一下,C++的注释一共有两种:单行注释和多行注释,单行注释用//
双斜杠表示,多行注释用一对单斜杠+星号/**/
实现,编译器会自动跳过注释,不编译注释,注释是给人看的。
实例:
#include <iostream>
//
using namespace std;//命名空间——单行注释
int main(){
/\*
programer:thomas
date:2020\*\*\*\*
"hello world"
\*/
return 0;
}
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 |
上表格是C++的所有关键字、保留字
关键字不可作为变量名、函数名等等,它们是固定的。
先不着急讲,以后再说,有些我都不知道。🙌
C++数据类型
C++含有很多的数据结构
数字类型
C++的数字类型有整形和浮点型两种,先知道这两种。
整形
整形,顾名思义是存储整数的类型,用整形声明的变量可以存储整数,来看一个实例:
#include <iostream>
using namespace std;
int main(){
short aNum_short;
int aNum_int;
long long aNum_long;
cin >> aNum_short;
cin >> aNum_int;
cin >> aNum_long;
cout << aNum_short << " " << aNum_int << " " << aNum_long << endl;
return 0;
}
运行结果
输入:
5 6 7
输出:
5 6 7
解析:
用int类型定义了一个变量aNum
,输入aNum为5,输出aNum为5,很简单对不?:happy:
难的以后再说。
整形还有两个类型,一个short int和long int,和unsigned都是顾名思义,短整形和长整形。
名称 | 所占字节数 | 取值范围 |
---|---|---|
short[int] | 2 | -32768~32767 |
unsigned short[int] | 2 | 0~65535 |
int | 4 | -2147483648~2147483647 |
unsigned int | 4 | 0~4294967295 |
long long | 8 | -263~263-1 |
unsigned long long | 8 | 0~264-1 |
如果数据比较小,就用short,正常数据还是用纯int,要是用比较大的数据,用long long int,能存储的范围大,unsigned是无符号的意思,就是无﹣
号,unsigned long long的数据值可以翻倍!你们自己可以试试264是多少,unsigned用法详见https://blog.csdn.net/cool99781/article/details/104505559。
浮点型
浮点形,顾名思义是存储带小数点(小数)的类型,用浮点型声明的变量可以存储整数,浮点型有几个定义方法:float单精度浮点数,double双精度浮点数,long double高精度浮点数。
精度 | 名称 | 所占字节数 | 取值范围 |
---|---|---|---|
单精度浮点数 | float | 4 |
−
3.4
E
38
3.4
E
38
(
7
位
有
效
数
字
)
-3.4E+38~3.4E+38(7位有效数字)
−3.4E+38 3.4E+38(7位有效数字) |
| 双精度浮点数 | double | 8 |
−
1.79
E
308
1.79
E
308
(
15
位
有
效
数
字
)
-1.79E+308~1.79E308(15位有效数字)
−1.79E+308 1.79E308(15位有效数字) |
| 高精度浮点数 | long double | 12 |
3.4
E
−
4932
1.1
E
4932
(
19
位
有
效
数
字
)
3.4E-4932~1.1E+4932(19位有效数字)
3.4E−4932 1.1E+4932(19位有效数字) |
实例:
#include <iostream>
using namespace std;
int main(){
float f_float;
double f_double;
long double f_longD;
cin >> f_float >> f_double >> f_longD;
cout << f_float << " " << f_double << " " << f_longD << endl;
return 0;
}
输入:1 2.5 3.0
输出:1 2.5 3.0
布尔类型
布尔类型从某种意义上来说,也是一种整形,可以转化为整形,不过这个整形很小,只能有0和1,就像二进制一样,0是false,1是true,布尔类型的关键字是bool
,实例如下
bool flag = true;//赋值初始值
cout << int(flag) << endl; //强制类型转换变成int,输出1
flag = false;
cout << int(flag) << endl; //输出0
字符类型
字符类型只能存储一个字符,用单引号 ‘ ’ 括起来,c++中的字符类型只支持ASCLL编码,不懂ASCLL编码的朋友可以百度一下,我就不唠叨了,要不然写不完了。关键字是char
char ch = 'A';
cout << ch << endl;//输出A、
cout << int(ch) << endl;//输出A的ASCLL码,65
小测试
为下面的程序挑错😙
#include <oistream>
using namespace;
int hello(){
int a
cin << a;
cout << "a = " << a << endl;
double f;
cin << f;
char c = 'f';
cout << c" " << endl;
return 'a';
}
错误多了😅
运算符
C++ 运算符
运算符是一种告诉编译器执行特定的数学或逻辑操作的符号。C++ 内置了丰富的运算符,并提供了以下类型的运算符:
- 算术运算符
- 关系运算符
- 逻辑运算符
- 位运算符
- 赋值运算符
- 杂项运算符
本章将逐一介绍算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符和其他运算符。
算术运算符
下表显示了 C++ 支持的算术运算符。
假设变量 A 的值为 10,变量 B 的值为 20,则:
运算符 | 描述 | 实例 |
---|---|---|
+ | 把两个操作数相加 | A + B 将得到 30 |
- | 从第一个操作数中减去第二个操作数 | A - B 将得到 -10 |
* | 把两个操作数相乘 | A * B 将得到 200 |
/ | 分子除以分母 | B / A 将得到 2 |
% | 取模运算符,整除后的余数 | B % A 将得到 0 |
++ | 自增运算符,整数值增加 1 | A++ 将得到 11 |
– | 自减运算符,整数值减少 1 | A-- 将得到 9 |
实例
请看下面的实例,了解 C++ 中可用的算术运算符。
复制并粘贴下面的 C++ 程序到 test.cpp 文件中,编译并运行程序。
实例
#include <iostream>
using namespace std;
int main() {
int a = 21;
int b = 10;
int c;
c = a + b;
cout << "Line 1 - c 的值是 " << c << endl ;
c = a - b;
cout << "Line 2 - c 的值是 " << c << endl ;
c = a \* b;
cout << "Line 3 - c 的值是 " << c << endl ;
c = a / b; cout << "Line 4 - c 的值是 " << c << endl ;
c = a % b; cout << "Line 5 - c 的值是 " << c << endl ;
int d = 10; // 测试自增、自减 c = d++; cout << "Line 6 - c 的值是 " << c << endl;
d = 10; // 重新赋值 c = d--; cout << "Line 7 - c 的值是 " << c << endl ;
return 0;
}
当上面的代码被编译和执行时,它会产生以下结果:
Line 1 - c 的值是 31
Line 2 - c 的值是 11
Line 3 - c 的值是 210
Line 4 - c 的值是 2
Line 5 - c 的值是 1
Line 6 - c 的值是 10
Line 7 - c 的值是 10
关系运算符
下表显示了 C++ 支持的关系运算符。
假设变量 A 的值为 10,变量 B 的值为 20,则:
运算符 | 描述 | 实例 |
---|---|---|
== | 检查两个操作数的值是否相等,如果相等则条件为真。 | (A == B) 不为真。 |
!= | 检查两个操作数的值是否相等,如果不相等则条件为真。 | (A != B) 为真。 |
> | 检查左操作数的值是否大于右操作数的值,如果是则条件为真。 | (A > B) 不为真。 |
< | 检查左操作数的值是否小于右操作数的值,如果是则条件为真。 | (A < B) 为真。 |
>= | 检查左操作数的值是否大于或等于右操作数的值,如果是则条件为真。 | (A >= B) 不为真。 |
<= | 检查左操作数的值是否小于或等于右操作数的值,如果是则条件为真。 | (A <= B) 为真。 |
实例
请看下面的实例,了解 C++ 中可用的关系运算符。
复制并黏贴下面的 C++ 程序到 test.cpp 文件中,编译并运行程序。
实例
#include <iostream>
using namespace std;
int main() {
int a = 21;
int b = 10;
int c ;
if( a == b ) {
cout << "Line 1 - a 等于 b" << endl ;
} else {
cout << "Line 1 - a 不等于 b" << endl ;
}
if ( a < b ) {
cout << "Line 2 - a 小于 b" << endl ;
} else {
cout << "Line 2 - a 不小于 b" << endl ;
}
if ( a > b ) {
cout << "Line 3 - a 大于 b" << endl ;
} else {
cout << "Line 3 - a 不大于 b" << endl ;
} /\* 改变 a 和 b 的值 \*/
a = 5; b = 20;
if ( a <= b ) {
cout << "Line 4 - a 小于或等于 b" << endl ;


**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!**
**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**
**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618668825)**
,编译并运行程序。
###### 实例
#include
using namespace std;
int main() {
int a = 21;
int b = 10;
int c ;
if( a == b ) {
cout << “Line 1 - a 等于 b” << endl ;
} else {
cout << “Line 1 - a 不等于 b” << endl ;
}
if ( a < b ) {
cout << “Line 2 - a 小于 b” << endl ;
} else {
cout << “Line 2 - a 不小于 b” << endl ;
}
if ( a > b ) {
cout << “Line 3 - a 大于 b” << endl ;
} else {
cout << “Line 3 - a 不大于 b” << endl ;
} /* 改变 a 和 b 的值 */
a = 5; b = 20;
if ( a <= b ) {
cout << “Line 4 - a 小于或等于 b” << endl ;
[外链图片转存中…(img-hLX993rE-1715538587664)]
[外链图片转存中…(img-umlFlVDv-1715538587664)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新