C++入门教程:大白话讲解,新手基础篇⭐⭐⭐(附源码及详解、视频课程资料推荐)

持续更新……

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++,可以点下面这个网站看视频教程,我当初就是跟他们的老师入门的。

//www.csai.online/course/explore/B02

在这里插入图片描述

文字教程

推荐两个比较好的教程网站

w3cschool://www.w3cschool.cn/cpp/

runoob菜鸟教程://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用法详见//blog.csdn.net/cool99781/article/details/104505559

浮点型

​ 浮点形,顾名思义是存储带小数点(小数)的类型,用浮点型声明的变量可以存储整数,浮点型有几个定义方法:float单精度浮点数,double双精度浮点数,long double高精度浮点数。

精度 名称 所占字节数 取值范围
单精度浮点数 float 4 $-3.4E+38~3.4E+38(7位有效数字)$
双精度浮点数 double 8 $-1.79E+308~1.79E308(15位有效数字)$
高精度浮点数 long double 12 $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 ;   
    }   
    if ( b >= a )   {      
        cout << "Line 5 - b 大于或等于 a" << endl ;   
    }   
    return 0; 
}

当上面的代码被编译和执行时,它会产生以下结果:

Line 1 - a 不等于 b
Line 2 - a 不小于 b
Line 3 - a 大于 b
Line 4 - a 小于或等于 b
Line 5 - b 大于或等于 a
逻辑运算符

下表显示了 C++ 支持的关系逻辑运算符。

假设变量 A 的值为 1,变量 B 的值为 0,则:

运算符 描述 实例
&& 称为逻辑与运算符。如果两个操作数都非零,则条件为真。 (A && B) 为假。
|| 称为逻辑或运算符。如果两个操作数中有任意一个非零,则条件为真。 (A || B) 为真。
! 称为逻辑非运算符。用来逆转操作数的逻辑状态。如果条件为真则逻辑非运算符将使其为假。 !(A && B) 为真。
实例

请看下面的实例,了解 C++ 中可用的逻辑运算符。

复制并黏贴下面的 C++ 程序到 test.cpp 文件中,编译并运行程序。

实例
#include <iostream> 
using namespace std;  
int main() 
{   
    int a = 5;   
    int b = 20;   
    int c ;    
    if ( a && b )   {      
        cout << "Line 1 - 条件为真"<< endl ;   
    }   
    if ( a || b )   {      
        cout << "Line 2 - 条件为真"<< endl ;   
    }   /* 改变 a 和 b 的值 */   
    a = 0;   b = 10;   
    if ( a && b )   {      
        cout << "Line 3 - 条件为真"<< endl ;   
    }   else   {      
        cout << "Line 4 - 条件不为真"<< endl ;   
    }   
    if ( !(a && b) )   
    {      
        cout << "Line 5 - 条件为真"<< endl ;   
    }   
    return 0; 
}

当上面的代码被编译和执行时,它会产生以下结果:

Line 1 - 条件为真
Line 2 - 条件为真
Line 4 - 条件不为真
Line 5 - 条件为真

数组

C++ 数组

C++ 支持数组数据结构,它可以存储一个固定大小的相同类型元素的顺序集合。数组是用来存储一系列数据,但它往往被认为是一系列相同类型的变量。

数组的声明并不是声明一个个单独的变量,比如 number0、number1、…、number99,而是声明一个数组变量,比如 numbers,然后使用 numbers[0]、numbers[1]、…、numbers[99] 来代表一个个单独的变量。数组中的特定元素可以通过索引访问。

所有的数组都是由连续的内存位置组成。最低的地址对应第一个元素,最高的地址对应最后一个元素。

声明数组

在 C++ 中要声明一个数组,需要指定元素的类型和元素的数量,如下所示:

type arrayName [ arraySize ];

这叫做一维数组。arraySize 必须是一个大于零的整数常量,type 可以是任意有效的 C++ 数据类型。例如,要声明一个类型为 double 的包含 10 个元素的数组 balance,声明语句如下:

double balance[10];

现在 balance 是一个可用的数组,可以容纳 10 个类型为 double 的数字。

初始化数组

在 C++ 中,您可以逐个初始化数组,也可以使用一个初始化语句,如下所示:

double balance[5] = {1000.0, 2.0, 3.4, 7.0, 50.0};

大括号 { } 之间的值的数目不能大于我们在数组声明时在方括号 [ ] 中指定的元素数目。

如果您省略掉了数组的大小,数组的大小则为初始化时元素的个数。因此,如果:

double balance[] = {1000.0, 2.0, 3.4, 7.0, 50.0};

您将创建一个数组,它与前一个实例中所创建的数组是完全相同的。下面是一个为数组中某个元素赋值的实例:

balance[4] = 50.0;

上述的语句把数组中第五个元素的值赋为 50.0。所有的数组都是以 0 作为它们第一个元素的索引,也被称为基索引,数组的最后一个索引是数组的总大小减去 1。以下是上面所讨论的数组的的图形表示:

数组表示

访问数组元素

数组元素可以通过数组名称加索引进行访问。元素的索引是放在方括号内,跟在数组名称的后边。例如:

double salary = balance[9];

上面的语句将把数组中第 10 个元素的值赋给 salary 变量。下面的实例使用了上述的三个概念,即,声明数组、数组赋值、访问数组:

实例
#include <iostream> 
using namespace std;  
#include <iomanip> 
using std::setw;  
int main () {   
int n[ 10 ]; // n 是一个包含 10 个整数的数组    // 初始化数组元素
for ( int i = 0; i < 10; i++ )   {      
n[ i ] = i + 100; // 设置元素 i 为 i + 100   
}   cout << "Element" << setw( 13 ) << "Value" << endl;    // 输出数组中每个元素的值                        
for ( int j = 0; j < 10; j++ )   {      
cout << setw( 7 )<< j << setw( 13 ) << n[ j ] << endl;   
}    
return 0; 
}

上面的程序使用了 setw() 函数来格式化输出。当上面的代码被编译和执行时,它会产生下列结果:

Element        Value
      0          100
      1          101
      2          102
      3          103
      4          104
      5          105
      6          106
      7          107
      8          108
      9          109

字符串

需要用到C++的STL库,自己查查吧,参考//www.runoob.com/cplusplus/cpp-strings.html

字符串用string定义,还要预处理一个库#include <string>

#include <iostream>
#include <string>
using namespace std;
int main(){
    string str;
    cin >> str;
    cout << str[0] << endl;
    cout << str[2] << endl;
    cout << str << endl;
    return 0;
}

StdIn:
HelloWorld
StdOut:
H
e
HelloWorld

字符串可以用[]访问下标,仔细研究上网查🔼

控制语句

循环 2021.2.7补

for 2021.2.7补

一般用于循环次数固定的循环,而且比较常用,格式如下:

for(表达式1;表达式2;表达式3)
{
    循环体(可无)
}

表达式1:循环变量初始化,整个循环不管执行多少次这一个表达式也只执行一次且执行在第一次。

表达式2:循环的终止条件,如果返回true继续执行,返回false退出循环

表达式3:每一次循环执行完执行此表达式,一般写一些循环变量的自增自减。

实例:

for (int i = 1; i <= 10; i++)
{
    cout << i  << " ";
}
cout << endl;

注:这里是为了输出才把i的初始值设为1,如果没有题目要求或限定,一般建议初始值设为0,数组等数据结构一般都是从0开始。

for循环的结构也比较灵活,可以调整。

比如

for (int i = 0; i < 10; i++);

是没有循环体的结构

再比如

int i = 0;
for (; i < 10; i++)
{
    cout << i << " ";
}

这是把表达式1放出了循环

还有for(int i = 0; true; i++)属于无限循环等等

这里来一个例题,输出n个同学的成绩平均值,输入一个n,第二行输入n个成绩,输出一个平均值。

两种解决方案,一种用数组,一种直接解决。

Solution1:

#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
    int n; // 最多1001个人
   	double sum = 0.0, a[1001]; // 最多1001个人
    cin >> n;
    for (int i = 0; i <  n; i++)
        cin >> a[i];
    for (int i = 0; i < n; i++)
    {
        sum += a[i];
    }
    printf("%.2f\n", sum / (double)n);
    return 0;
}
// 写的有点匆忙,有错误请评论

Solution2,这个方法其实我更喜欢,跟着输入就加了,这样更快

#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
    int n;
    double sum = 0.0, t;
    cin >> n;
    for (int i = 0; i < n; i++)
    {
        cin >> t;
        sum += t;
    }
    printf("%.2f\n", sum / (double)n);
    return 0;
}
while 2021.2.8补

基础训环网站//www.runoob.com/cplusplus/cpp-loops.html

判断分支 2021.2.8补

基础判断网站//www.runoob.com/cplusplus/cpp-decision.html

函数

函数是一组一起执行一个任务的语句。每个 C++ 程序都至少有一个函数,即主函数 main() ,所有简单的程序都可以定义其他额外的函数。

您可以把代码划分到不同的函数中。如何划分代码到不同的函数中是由您来决定的,但在逻辑上,划分通常是根据每个函数执行一个特定的任务来进行的。

函数声明告诉编译器函数的名称、返回类型和参数。函数定义提供了函数的实际主体。

C++ 标准库提供了大量的程序可以调用的内置函数。例如,函数 strcat() 用来连接两个字符串,函数 memcpy() 用来复制内存到另一个位置。

函数还有很多叫法,比如方法、子例程或程序,等等。

定义函数

C++ 中的函数定义的一般形式如下:

return_type function_name( parameter list ) {   body of the function }

在 C++ 中,函数由一个函数头和一个函数主体组成。下面列出一个函数的所有组成部分:

  • 返回类型:一个函数可以返回一个值。return_type 是函数返回的值的数据类型。有些函数执行所需的操作而不返回值,在这种情况下,return_type 是关键字 void
  • 函数名称:这是函数的实际名称。函数名和参数列表一起构成了函数签名。
  • 参数:参数就像是占位符。当函数被调用时,您向参数传递一个值,这个值被称为实际参数。参数列表包括函数参数的类型、顺序、数量。参数是可选的,也就是说,函数可能不包含参数。
  • 函数主体:函数主体包含一组定义函数执行任务的语句。

更多//www.runoob.com/cplusplus/cpp-functions.html

2021/2/7更新,继续写函数

先来一个实例:

#include <iostream>
using namespace std;
int f(int aNum)
{
    aNum -= 1;
    return aNum;
}
int main()
{
    int ans;
    int n;
    cin >> n;
    ans = f(n);
    cout << n << " " << ans << endl;
    return 0;
}

我们来猜一下这个程序的输出结果,如果我输入3,输出的是3 2?还是2 2?

首先来分析:输入了一个n=3,将n传递给f()函数,aNum是一个参数,这个名字你可以自己定,但是其中的值并不改变,所以aNum还是3,当然aNum也可以改成bNum、cNum、aMum随便。

函数的返回值是int,也就是整数,返回aNum-1也就是3-1=2,返回的值是2。ans作为返回值的接收变量,它获得的值也就是2。

🚩这里要注意了,n作为传值参数,给函数中的aNum传送了一个数字,而这两个变量的地址不同,所以aNum的改变对于n没有改变,所以aNum-1是2,而n还等于3!所以上面的程序输出为:3 2

⭐怎么让n跟随aNum一起改变呢?别急,也是有方法的,只要把这两个变量的地址统一就行。怎么理解?例如n的地址是X,那么把n的地址传给aNum,而不是只传一个数字,于是aNum的改变就是n的改变。

下面是实现方法,只要在参数变量前面加一个&。

即:

#include <iostream>
using namespace std;
int f(int &aNum)
{
    aNum -= 1;
    return aNum;
}
int main()
{
    int ans;
    int n;
    cin >> n;
    ans = f(n);
    cout << n << " " << ans << endl;
    return 0;
}

此程序输出为:2 2

2021/2/7更新,标准库函数

C++已经帮你写好了很多函数,你可以包含一些库去直接调用。比如memset()、strlen()、strcpy()、setw()等等。

常用的库也有iostream,cstring,cstdio,cstdlib,iomanip等,需要用#include语句包含。

C++常用库大全://en.cppreference.com/w/cpp/header

C++ 基本中的基础算法

找数组中最大值(及最小值)

排序数组(简单算法——选择排序、冒泡排序、sort函数)

C++标准库

STL

小练习题

命名空间using namespace std

//www.runoob.com/cplusplus/cpp-namespaces.html

对于C++的常见答疑(来自百度百科)

问题1:学习C++大约需要多久?有些书籍上说几十天就能学会C++这是真的吗?

回答:在高校中安排的C++课程约为半年至一年左右,但事实上要精通C++,这点时间是远远不够的。C++并不只是一门简单的计算机语言,而是逐渐形成了一个学科体系。要熟练运用C++,做出界面美观、功能强大的程序,还必须对数据结构、STL、设计模式等各个专题进行深入学习。因此,学习C++所需时间取决于学习者本身的基础和期望达到的学习效果。如果一位零基础的初学者要掌握C++语言本身的所有特性,1~2年的时间是比较正常的。至于说几十天能够学会C++,对于已经精通其他计算机语言的学习者来说也是可能的。

问题2:学习C++需要什么样的数学和英语水平?学历较低可以学C++么?

回答:学习程序设计必然会用到数学和英语。至少输入的代码基本都是英文字母,我们要用的算法多少和数学、逻辑学有些关系。因此,彻底没有数学和英语基础就学习程序设计真的很困难。一般认为,有初中或以上的数学和英语基础就可以学习程序设计了。在现实中,很多中学生已经成为了编程高手。如果已经忘记以前所学的数学和英语知识,建议略花一些时间去回顾一下。数学和英语对学习程序设计还是有莫大的裨益。数学能够锻炼一个人的逻辑思维能力,使接受算法的速度更快;英语则有助于学习者看懂计算机的反馈信息、阅读更多原版的技术资料。

问题3:以前学习过程序设计,时间长都忘记了,现在不从事计算机行业。随着年龄增加,学习能力和记忆力都可能有所减弱,这样能学习C++么?

回答:学习能力和记忆力的确会随年龄受到影响。但是学习C++本来就是一个周期相对较长的过程,最重要的是保持学习的热情和耐心。C++语言的基础部分已经基本固定,不会经常发生重大变化,因此即使年龄稍大,经过努力后掌握C++是完全可能的。

问题4:很多网友说学习C++之前要学C语言,是这样吗?

回答:C语言的部分语法的确与C++相似甚至相同。如果有C语言的基础学习C++肯定会更快。但是,这并不意味着学习C++之前必须要学C语言,而且对于初学者来说在短时间内接触这两种语言反而会造成部分概念的混淆。因此,如果你的目标是C++而不是C语言,那么不必特意在学习C++之前先去学C语言。

问题5:现在学习C++主要有哪些集成开发环境?哪个最适合初学者?

回答:首先需要说明的是,集成开发环境和编译器又不是一回事情。通常集成开发环境可以搭配一种或多种编译器。编译器的功能是将C++源程序转变成可执行的程序,而集成开发环境则是一系列代码编辑、调试和管理工具。目前Windows操作系统下使用比较广泛的集成开发环境有微软的Visual Studio(包括6.0版、2010版和2012版等)、Dev-C++、Eclipse、Code::Blocks等。从集成开发环境的界面友好程度来看,微软的Visual Studio有着不小的优势。并且Visual Studio的市场占有率也是非常高的,很多院校、培训机构、企业都在使用。因此,建议有条件的初学者优先选用Visual Studio。如果实在无法安装Visual Studio,那么Dev-C++或Code::Blocks也可以作为替代。

问题6:如何保持学习C++的积极性和热情?

回答:对于大多数初学者来说,学习C++语言还是有一定难度的。因此,必须要掌握好学习的速度和节奏,不要对自己产生过大的压力。有些读者说只需要3周就能把小半本书看完,可是剩下的那部分却始终看不进去。事实上这说明了前面的小半本书还没有完全消化吸收——暴饮暴食自然就要没胃口了。建议初学者不要贪急贪快,那样很容易毁掉自己的学习热情。如果为自己订制了一个相对长期的、宽松的学习计划,反而更容易培养自己的积极性。

问题7:零基础的初学者应该学VB还是学C++?

分已经基本固定,不会经常发生重大变化,因此即使年龄稍大,经过努力后掌握C++是完全可能的。

问题4:很多网友说学习C++之前要学C语言,是这样吗?

回答:C语言的部分语法的确与C++相似甚至相同。如果有C语言的基础学习C++肯定会更快。但是,这并不意味着学习C++之前必须要学C语言,而且对于初学者来说在短时间内接触这两种语言反而会造成部分概念的混淆。因此,如果你的目标是C++而不是C语言,那么不必特意在学习C++之前先去学C语言。

问题5:现在学习C++主要有哪些集成开发环境?哪个最适合初学者?

回答:首先需要说明的是,集成开发环境和编译器又不是一回事情。通常集成开发环境可以搭配一种或多种编译器。编译器的功能是将C++源程序转变成可执行的程序,而集成开发环境则是一系列代码编辑、调试和管理工具。目前Windows操作系统下使用比较广泛的集成开发环境有微软的Visual Studio(包括6.0版、2010版和2012版等)、Dev-C++、Eclipse、Code::Blocks等。从集成开发环境的界面友好程度来看,微软的Visual Studio有着不小的优势。并且Visual Studio的市场占有率也是非常高的,很多院校、培训机构、企业都在使用。因此,建议有条件的初学者优先选用Visual Studio。如果实在无法安装Visual Studio,那么Dev-C++或Code::Blocks也可以作为替代。

问题6:如何保持学习C++的积极性和热情?

回答:对于大多数初学者来说,学习C++语言还是有一定难度的。因此,必须要掌握好学习的速度和节奏,不要对自己产生过大的压力。有些读者说只需要3周就能把小半本书看完,可是剩下的那部分却始终看不进去。事实上这说明了前面的小半本书还没有完全消化吸收——暴饮暴食自然就要没胃口了。建议初学者不要贪急贪快,那样很容易毁掉自己的学习热情。如果为自己订制了一个相对长期的、宽松的学习计划,反而更容易培养自己的积极性。

问题7:零基础的初学者应该学VB还是学C++?

回答:不得不承认,用Visual Basic制作一个Windows窗口界面的程序比C++方便得多。因此,初学者可能在学习Visual Basic的时候觉得更容易,更有成就感。Basic和C++属于计算机高级语言中的两支路线,各有所长。但是,从计算机高级语言的发展趋势来说,C++更具有代表性。如果只是想了解一下程序设计,学习Visual Basic也未尝不可。


入门课程推荐

BTW:如果想入门C++,可以点下面这个网站看视频教程,我当初就是跟他们的老师入门的。

//www.csai.online/course/explore/B02

在这里插入图片描述