C++:缺省参数|函数重载|引用|const引用

07-12 1776阅读

欢迎来到Harper·Lee的学习笔记!

博主主页传送门:Harper·Lee的博客主页

C++:缺省参数|函数重载|引用|const引用

想要一起进步的uu可以来后台找我哦!

一、缺省参数

1.1 缺省参数的定义

缺省参数:是声明或定义函数时为函数的参数指定⼀个缺省值。在调用该函数时,如果没有指定实参则采⽤该形参的缺省值,否则使用指定的实参。(有些地方把缺省参数叫做默认参数)

#include 
using namespace std;
void Func(int a = 0)//行参的后面赋一个常量值或者全局变量值,指定参数值
{
	cout 
	Func(); // 没有传参时,使⽤参数的默认值
	Func(10); // 传参时,使⽤指定的实参
	return 0;
}

	cout 
	Func1();//不传参数,10,20,30
	Func1(1);//传一个参数,1,20,30
	Func1(1, 2, 3);//1,2,3
    //Func1( ,1, );这种形式不可以,因为是本贾尼规定的
	return 0;
}

	cout 
    //Func2();//不传参数会报错
	Func2(100);//
	Func2(100, 200);
    Func2(100,200,300);
	return 0;
}

	cout 
    Func2(100, ,300);//error
    return 0;
}
}//error
//如果生命与定义位置同时出现,恰巧两个位置提供的值不同,那编译器就无法确定到底该用那个缺省值。
//test.h
void Func2(int a = 10);//声明中赋缺省值
// test.cpp
void Func2()//定义中没有赋缺省值
{}//right

	return a + b;
}
double Add(double a, double b)
{
	return a + b;
}
int main()
{
	cout 
	cout 
	cout 
	f();//调用的是没有参数的f函数
	f(1);//调用的是有参数f函数
	return 0;
}

	cout 
	cout 
	f1(1, 2.0);
	f1(1.0, 2);
	return 0;
}

	cout 
	cout 
	f3();//error函数调用看的是行参,与缺省参数没有关系!因此发生歧义!!!
	f3(2);//给了参数就明确说明是要调用第二个函数
	return 0;
}
}
int fxx()
{
	return 0;
}

	int a = 0;
	int& b = a;//引⽤:b是a的别名
	int& c = b;//也可以给别名b取别名,c相当于还是a的别名
	++c;//就是++b,也就是++a
	cout 
	int a = 1;
	int& b = a;//引用b取别名,是a的别名
	int d = 20;
	b = d;//这是一个赋值,因为不能改变指向
	printf("b = %d\n", b);
	cout 
	int m = 20;
	x = m;//x被改变,实体a也被改变(引用对象改变了,被引用对象也改变了)
	cout 
    int m = 20;
    *x = m;
 	cout 
	int a = 2;
	Func(a);
    //Func1(&a);
	return 0;
}

	int tmp = *a;
	*a = *b;
	*b = tmp;
}
//C++中引用形式的Swap函数
void Swap2(int& rx, int& ry)
{
	int tmp = rx;
	rx = ry;
	ry = tmp;
}
int main()
{
	int x = 2, y = 4;
	Swap1(&x, &y);..是用来指针
	cout 
	int a = 0;
	return a;//返回后,函数栈桢被销毁,返回引用,相当于返回一个野指针
}

	int a = 0;
	int* p = &a;
	*p = 1;//指针需要解引用才能访问对象
	int& ra = a; 
	ra = 2;//引用可以直接访问对象
	return 0;
}

    int a = 0; 
    return a;
}//返回一个类似野指针的东西,相当于是空引用

	const int a = 10;
	int& ra = a;        //error,权限放大
	const int b = 20;
	const int& rb = b;  //right,权限平移
	int c = 30;
	const int& rc = c;  //right,权限缩小
	++c;                //right
	++rc;               //error,c和rc是同一个地址不同的权限
	const int& rd = 40; //right,const引用可以给常量取别名
	int& re = (a + b);  //error,C++规定临时对象具有常性,这里,权限放大,const修饰即可
	const int& rf = (a + b);//right
    int rg = (a + b);//拷贝,不存在权限放大
    //a+b被存放在临时对象中,对临时对象引用取别名需要const修饰
    
	return 0;
}

    int a = 10;
    int b = 20;
    const int& rf = (a + b);//right,
    //a+b表达式的结果被存放在临时对象中,rf引用的对象是这个临时对象
    //但是临时对象具有常性,因此需要const修饰
    
    return 0;
}

	double d = 12.34;
	int i = d;//这里是通过了隐式类型转换,中间产生一个int临时对象存储d,i=12
	int& ri = d;          //error
	const int& rii = d;   //right,rii引用d,实际是引用的d的临时对象i
	return 0;
}

VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]