C++自我学习.3
1.返回引用
当返回的是被调函数中的一个变量的引用时,注意如果自动变量不加static说明符,在返回就会被销毁,引用指向这样一个变量会存在危险性
2.左值和右值
左值是一个对象或者变量,代表一个固定地址,而没有固定地址的临时对象或临时变量就是右值,不能代表一个固定地址
int i = 1;//赋值运算赋左侧必须是左值,i就是左值,变量名,而3--就不行
左值也可以拥有右值属性,反过来不行
例:i = i+5;
i+5虽然是左值,但拥有右值属性
补:左值表达式就是一个值为左值的表达式,右值表达式就是值为右值的表达式
3.默认实参:
某些函数中有这样一种形参,在函数很多次被调用中,它们都被赋予相同的值,我们把这个反复出现的值叫做默认实参
注意:
1.调用含有默认实参的函数时,可以包含该实参,也可以省略该实参
2.赋默认实参时,要从右向左赋值
3.多个形参中,一旦某个形参被赋了某个默认值,后面的形参都必须有默认值
- 函数重载:
很简单,就是有一批功能类似(甚至相同)的函数,只是面对传来的不同数据类型的实参,分别应用到不同的函数中去计算
如:
int square(int x) square(a)
double square(double y) square(b)
char square(char y) square(c)
string sauqre(string z) square(d)
a,b,c,d保证实参类型和形参类型相符合
同名函数形参类型,形参个数必须有一个不同
5.函数模板:
泛型编程
template开始泛型编程
typename声明泛指类型
T形式类型形参作为实际数据类型的占位符
例:
template <typename T>
T max(T value1,T value2, T value3 )
{
T max=value1;
......
}
6.递归:
要素:
1.递归函数的功能
2.递归的基本情况和终止条件
3.递归的等价关系式
7.c++11:随机数生成引擎和配置
1.随机数函数rand( )
随机数种子:srand(seed),种子通常用时间函数time(0)
2.<random>
random库中的组件——随机数引擎类和随机数分布类。
随机数引擎类:原始随机数发生器
随机数分布类:接受一个随机数引擎作为参数,分布类的对象使用这个参数生成随机数,并映射到指定的分布,根据用户的需求利用随机数引擎生成符合条件的随机数某一分布概率的随机数。
如何使用:(不建议单独使用引擎类)
default_random_engine engine1 (static_cast<unsigned int>(time(0)));
uniform_int_distribution <unsigned int> random2 (1,100); <unsigned int>随机数类型
常见:
default_random_engine 随机非负数引擎类
uniform_int_distribution 指定范围非负数分布类,生成int,unsigned int,shor,unsigned short,long,long long等等数据类型
uniform_real_distribution 指定范围随机实数分布类,float,double.....