一、缺省参数
缺省参数可分为全缺省和半缺省
全缺省
void Func(int a = 10, int b = 20, int c = 30)
{
cout<<"a = "<<a<<endl;
cout<<"b = "<<b<<endl;
cout<<"c = "<<c<<endl;
}
半缺省
void Func(int a, int b = 10, int c = 20)
{
cout<<"a = "<<a<<endl;
cout<<"b = "<<b<<endl;
cout<<"c = "<<c<<endl;
}
需要注意的是:半缺省参数必须从右往左依次来给出,不能间隔着给
应该从左往右 依次给出
二、函数重载
自然语言中,一个词可以有多重含义,人们可以通过上下文来判断该词真实的含义,即该词被重 载了。
比如:以前有一个笑话,国有两个体育项目大家根本不用看,也不用担心。一个是乒乓球,一个 是男足。前者是“谁也赢不了!”,后者是“谁也赢不了!”
1、参数类型不同
int Add(int left, int right)
{
cout << "int Add(int left, int right)" << endl;
return left + right;
}
double Add(double left, double right)
{
cout << "double Add(double left, double right)" << endl;
return left + right;
}
2、 参数个数不同
void f()
{
cout << "f()" << endl;
}
void f(int a)
{
cout << "f(int a)" << endl;
}
3、参数类型顺序不同
void f(int a, char b)
{
cout << "f(int a,char b)" << endl;
}
void f(char b, int a)
{
cout << "f(char b, int a)" << endl;
}
4、常见错误(返回类型不一致)
需要注意的是返回类型不一致不属于函数重载,以为系统无法判断出你真正需要调用的函数
void Example()
{
int a = 1, b = 2;
int c = a + b;
return;
}
int Example()
{
int a = 1, b = 2;
return a + b;
}
三、引用
1、引用特性
1. 引用在定义时必须初始化
2. 一个变量可以有多个引用
3. 引用一旦引用一个实体,再不能引用其他实体
void TestRef()
{
int a = 10;
// int& ra; // 该条语句编译时会出错
int& ra = a;
int& rra = a;
ra = 7;
rra = 7; //同上条句子一样,可以将a值改成7
printf("%p %p %p\n", &a, &ra, &rra);
}
如图
2、常引用
void TestConstRef()
{
const int a = 10;
//int& ra = a; // 该语句编译时会出错,a为常量 报错原因:权限放大
const int& ra = a;
// int& b = 10; // 该语句编译时会出错,b为常量
const int& b = 10;
double d = 12.34;
//int& rd = d; // 该语句编译时会出错,类型不同
const int& rd = d; //只读,使用编译通过
}
3、使用场景
1、做参数
void Swap(int& left, int& right)
{
int temp = left;
left = right;
right = temp;
}
2、做返回值
效果:提高效率
int& Count()
{
static int n = 0; //加static原因,n是局部变量,会随函数销毁
n++;
return n;
}
int main()
{
int& ra = Count();
return 0;
}
2、内联函数
关键字:inline
以inline修饰的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方展开,没有函数调 用建立栈帧的开销,内联函数提升程序运行的效率。
inline int Add(int a, int b)
{
return a + b;
}
int main()
{
int a = 10, b = 20;
int ret = 0;
ret = Add(a, b);
return 0;
}
等效
int main()
{
int a = 10, b = 20;
int ret = 0;
ret = a + b;
return 0;
}
3、auto 关键字
4、指针
C语言中 空指针定义为
int* p1 = NULL;
C++ 空指针定义为
int* p1 = nullptr;