变量的引用
引用就相当于是给变量起了一个昵称,可以将他们看作为一体的存在
int a=100;//首先,我们定义一个整形变量a,赋值为100
int &b=a;//现在b就成为了a的昵称,对b操作就相当于对a进行操作
-----------------------------------------------------
//当b成为a的引用的时候,是不能被重新赋值的
int c=200;
&b=c;//错误
-----------------------------------------------
//并且引用时必须有初始值的,且不能为NULL;
int &b;//错误
int &b = NULL;错误
------------------------------------------------------
//如果初始化的内容为纯数字则需要定义为常引用,代表引用不能够更改所指向的内容
int &b=100;//错误
const int &b=100;//正确
----------------------------------------------------------
//在被定义为常引用后,是没有办法直接通过引用更改变量的值,可以通过修改变量来间接修改引用的值
int a=100;
const int &b=a;
b++;//错误
a++;//正确(修改a的值之后b的值也会被修改)
--------------------------------------------------------------
//函数也可以在自定义函数中接收传过来的参数,这样的话不需要像指针那样开辟空间,也没有生产副本可以提高效率
void fd(int &b,int &c)
{
cout<<b<<" "<<c<<endl;
}
强转的应用
int b(200);//c++给变量赋值的一种
double c=3.14;
int b(c)//将double类型的c强转为整形储存到b中
键盘输入
int a;
cin>>a;//输入
string类型字符串
字符串类型不是基本的数据类型,而是c++中的一个类,有很多的内部方法用来处理字符串
string s="123456";
cout<<s[0]<<endl;//字符串中单个字符的提取
cout<<s[6]<<endl;//此行命令已越界,但是程序并不会报错
cout<<s.at(6)<<endl;//更安全,越界之后会报错
cout<<s.lendgth()<<endl;//用来检测字符串的长度
//用for each方式遍历字符串
for(char c:s)//原理:会按照顺序将字符串中的数据一个一个存到c中读到\n停止
{
cout<<c<<endl;
}
内联函数
如果有一些函数,比较短而且调永的次数多,南无就可以考虑将他设置为内联函数,内联函数会在编译的时候自动展开到主函数中可以节省时间。
inline void fd(int a,int b)//在自定义函数开头加上inline,该函数就被设置成了内联函数
{
}
函数重载
函数是可以重名的,可以根据参数的个数和参数的类型来由电脑来判断调用哪一个函数
//打个比方说我创建了两个自定义函数,他们两个的函数名都是一样的,但是这两个自定义函数其中一个只有一个参数,而另外一个有两个参数
void fd(int a,int b ){}
void fd(int a){}
int main()
{
fd(10);//所以我们在main函数里调用的时候就会调用只写了一个参数的函数,如果传递两个参数则反之。
}
-------------------------------------------------------------------------
//这两个自定义函数里的参数都是一个,所以我们通过参数类型来判断调用哪个函数
void fd(int a){}
void fd(double a){}
int main()
{
fd(3.14);//传参为double类型,所以调用第二个,传参为int则反之
}
函数的默认值
自定义函数可以在接收函数处直接给函数赋值,这样如果没有给该参数传参的话,接直接按默认值处理,也可以在声明出添加默认值,但是,不能重复添加默认值(声明和定义只能其中一个添加)。
void fd(int a=100);//声明处添加
--------------------------------------------
void fd(int a=100)//定义处添加
{
cout<<a<<endl;
}
int main()
{
fd();//如果不给fd传参数的话会默认打印100
}
当一个自定义函数中有多个参数的时候,其中有默认值的话,那么这个参数后面的参数都需要添加默认值
void fd(int a,int b=100,int c=200)//b添加了默认值之后c也要添加默认值
{
}
函数重载不要和默认值一起用,有可能会会产生二义性,编译器无法做出选择
哑元函数
参数没有名字只有类型
void fd(int){
cout<<"hello"<<endl;
}
int main()
{
fd();//fd中无论传什么参数都会打印hello
}