一、C++函数
每个 C++ 程序都至少有一个函数,即主函数 main() 。
出现原因: 如果将所有代码都写到main()函数中,这样不仅使代码可读性差,修改代码时也很麻烦,而如果将main()函数中实现某个功能的代码块抽出来,形成一个子函数,如此可大大提高写代码效率。
除了以上提出的子函数,程序中还有很多便利的内置函数。例如,strcat()函数用来连接两个字符串。
1.定义函数格式:
返回类型 函数名 ( 形式参数)
{
函数主体(实现某个功能)
}
返回类型:一个函数可以返回一个值。有些函数执行完操作后不需要返回值,在这种情况下,返回类型是关键字 void。
函数名称:这是函数的实际名称。函数名和参数列表一起构成了函数签名。
参数:参数就像是占位符。当函数被调用时,传递一个值给了形式参数。参数是可选的,也就是说,函数可能不包含参数。
函数主体:函数主体包含一组定义函数执行任务的语句。
经典实例:
// 函数返回两个数中较大的那个数
int max(int num1, int num2)
{
// 局部变量声明
int result;
if (num1 > num2)
result = num1;
else
result = num2;
return result;
}
2.函数声明
函数声明会告诉编译器函数名称及如何调用函数。
格式:
返回类型 函数名 (形参) ;
对于上面定义的函数 max(),以下是函数声明:
int max(int num1, int num2);
3.调用函数
写好函数后,不知道如何调用函数,那可不行!
调用函数时,传递所需参数,如果函数返回一个值,则可以存储返回值。例如:
#include <iostream>
using namespace std;
// 函数声明
int max(int num1, int num2);
int main ()
{
// 局部变量声明
int a = 100;
int b = 200;
int ret;
// 调用函数来获取最大值
ret = max(a, b);
cout << "Max value is : " << ret << endl;
return 0;
}
// 函数返回两个数中较大的那个数
int max(int num1, int num2)
{
// 局部变量声明
int result;
if (num1 > num2)
result = num1;
else
result = num2;
return result;
}
编译后打印:
Max value is : 200
4.函数参数
函数参数分两种:
1.形式参数:进入函数时被创建,退出函数时被销毁。
2.实际参数:传递给函数的值有以下三种类型:
5.Lambda 函数
Lambda 函数定义:
[capture] (parameters) mutable ->return-type {statement};
(1) [capture]: 捕捉列表。捕捉列表出现在lambda函数的开始处。其中,[]是lambda引出符(即独特的标志符)
编译器根据该引出符判断接下来的代码是否是lambda函数
捕捉列表能够捕捉上下文中的变量以供lambda函数使用
捕捉列表由一个或多个捕捉项组成,并以逗号分隔,捕捉列表一般有以下几种形式:
<1> [var] 表示值传递方式捕捉变量var
<2> [=] 表示值传递方式捕捉所有父作用域的变量(包括this指针)
<3> [&var] 表示引用传递捕捉变量var
<4> [&] 表示引用传递捕捉所有父作用域的变量(包括this指针)
<5> [this] 表示值传递方式捕捉当前的this指针
<6> [=,&a,&b] 表示以引用传递的方式捕捉变量 a 和 b,而以值传递方式捕捉其他所有的变量
<7> [&,a,this] 表示以值传递的方式捕捉 a 和 this,而以引用传递方式捕捉其他所有变量
(2)(parameters):参数列表。与普通函数的参数列表一致。如果不需要参数传递,则可以连同括号()一起省略
(3)mutable : mutable修饰符。默认情况下,lambda函数总是一个const函数,mutable可以取消其常量性(下面有详解)在使用该修饰符时,参数列表不可省略(即使参数为空)
看以下实例:
#include <iostream>
using namespace std;
int main(){
int a = 10;
auto func1 = [=](){return a + 1;};
auto func2 = [=]()mutable{return a + 1;};
auto funt3 = [&]
{
a++;
return a;
}
cout << func1() << endl;
cout << func2() << endl;
a++;
cout << func1() << endl;
cout << func2() << endl;
cout << func3() <<endl;
return 0;
}
打印出:
11
12
11
13
12
为什么,第三行打印11?
lambda函数总是一个const函数,所以第三行打印11。
而加上mutable之后,取消了常量性,a可以在lambda函数体内改变,但不影响lambda表达式外面的a的值(所以最后一行打印12)。
(4)->return-type : 返回类型。用追踪返回类型形式声明函数的返回类型。
不需要返回值的时候也可以连同符号->一起省略
此外,在返回类型明确的情况下,也可以省略该部分,让编译器对返回类型进行推导
(5){statement} : 函数体。内容与普通函数一样,不过除了可以使用参数之外,还可以使用所有捕获的变量
(二)、C++数字
1.C++内置的一些数学函数
使用前需要先引用数学头文件
2.产生随机数
关于随机数生成器,有两个相关的函数。
一个是 rand(),该函数只返回一个伪随机数。生成随机数之前必须先调用 srand() 函数。
下面实例中使用了 time() 函数来获取系统时间的秒数,通过调用 rand() 函数来生成随机数:
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;
int main ()
{
int i,j;
// 设置种子
srand( (unsigned)time( NULL ) );
/* 生成 10 个随机数 */
for( i = 0; i < 10; i++ )
{
// 生成实际的随机数
j= rand();
cout <<"随机数: " << j << endl;
}
return 0;
}
(三)C++数组
1.声明数组:
type arrayName [ arraySize ];
int balance[10]; //声明了一个可存放10个整型数的数组
2.初始化数组
int balance[10]={0,1,2,3,4,5,6,7,8,9} ;
int balance1[]={1,2,3}; //如果省略掉了数组的大小,数组的大小则为初始化时元素的个数。
3.访问数组元素
数组元素可以通过数组名称加索引进行访问。元素的索引是放在方括号内,跟在数组名称的后边。
注意:索引从0开始。
例如,balance[5]指的是访问数组第六个元素
4.数组其它概念
以上讲的是最简单的一维数组理解完之后可理解以下概念:
(四)C++字符串
C++ 提供了以下两种类型的字符串表示形式:
1.C 风格 字符串
2.C++ 引入的 string 类类型
1.C 风格 字符串
C 风格的字符串起源于 C 语言,并在 C++ 中继续得到支持。
因此,
C语言中的以下的内含函数仍支持使用:
注意:使用前应先加入头文件
看以下代码实例:
#include <iostream>
#include <cstring>
using namespace std;
int main ()
{
char str1[11] = "Hello";
char str2[11] = "World";
char str3[11];
int len ;
// 复制 str1 到 str3
strcpy( str3, str1);
cout << "strcpy( str3, str1) : " << str3 << endl;
// 连接 str1 和 str2
strcat( str1, str2);
cout << "strcat( str1, str2): " << str1 << endl;
// 连接后,str1 的总长度
len = strlen(str1);
cout << "strlen(str1) : " << len << endl;
return 0;
}
2.C++中String类
C++ 标准库提供了 string 类 类型,支持上述所有的操作,另外还增加了其他更多的功能。
看一下代码讲解:
#include <iostream>
#include <string>
using namespace std;
int main ()
{
string str1 = "Hello";
string str2 = "World";
string str3;
int len ;
// 复制 str1 到 str3
str3 = str1;
cout << "str3 : " << str3 << endl;
// 连接 str1 和 str2
//方法一:
str3 = str1 + str2;
cout << "str1 + str2 : " << str3 << endl;
//方法二:
str1.append(str2);
cout << str1<<endl;
// 连接后,str3 的总长度
len = str3.size();//先暂且记住,等学了类和对象后便可知缘由
cout << "str3.size() : " << len << endl;
return 0;
}
除此之外,还有很多其它便利的内置函数,可参考以下网站:https://blog.csdn.net/qq_37941471/article/details/82107077