#include<iostream>usingnamespace std;
// 错误示例:Print(); 没有传够参数,会触发编译错误// 正确:Print(0); 打印 0,1,2voidPrint(int a, int b = 1, int c = 2){
cout << a << "," << b << "," << c << endl;
}
函数声明与定义分离时的注意事项:
缺省参数只能出现一次,且必须出现在声明部分。
#include<iostream>usingnamespace std;
voidPrint(int a, int b = 3); // 声明部分,缺省值写在这里voidPrint(int a, int b){ // 定义部分
cout << a << "," << b << endl;
}
intmain(){
Print(3); // 打印 3,3Print(2, 6); // 打印 2,6
}
四、函数重载
C++ 允许在同一作用域内存在多个同名函数,但必须满足以下条件之一:
参数个数不同
参数类型不同
参数顺序不同
#include<iostream>usingnamespace std;
// 参数个数不同intAdd(int a, int b, int c){
return a + b + c;
}
intAdd(int a, int b){
return a + b;
}
intmain(){
int a = Add(1, 1, 1);
int b = Add(1, 1);
cout << a << endl << b << endl;
}
#include<iostream>usingnamespace std;
// 参数类型不同intAdd(int x, int y){
return x + y;
}
doubleAdd(double x, double y){
return x + y;
}
intmain(){
int a = Add(2, 3);
double b = Add(1.2, 1.3);
cout << a << endl << b << endl;
}
#include<iostream>usingnamespace std;
// 参数顺序不同doubleCalc(int a, double b){
return a + b;
}
doubleCalc(double a, int b){
return a - b;
}
intmain(){
double a = Calc(2, 2.2); // 匹配第一个重载,结果 4.2double b = Calc(2.2, 2); // 匹配第二个重载,结果 0.2
cout << a << endl;
cout << b << endl;
}
五、引用(Reference)
1. 基本概念
引用是给已有的变量起一个别名,直接在原内存上操作,不产生新的副本。
语法:
类型& 引用别名 = 引用对象;
2. Swap 函数的对比
用指针交换需要解引用,比较繁琐;用引用则更直观。
指针写法:
#include<iostream>usingnamespace std;
voidSwap(int* a, int* b){
int tmp = *a;
*a = *b;
*b = tmp;
}
intmain(){
int a = 2, b = 3;
cout << "交换前 a = " << a << " b = " << b << endl;
Swap(&a, &b);
cout << "交换后 a = " << a << " b = " << b << endl;
}
引用写法:
#include<iostream>usingnamespace std;
voidSwap(int& a, int& b){
int tmp = a;
a = b;
b = tmp;
}
intmain(){
int a = 2, b = 3;
cout << "交换前 a = " << a << " b = " << b << endl;
Swap(a, b);
cout << "交换后 a = " << a << " b = " << b << endl;
}
3. 引用的要求
初始化: 局部或全局引用必须初始化。函数形参的引用在传入实参时即完成初始化。
命名: 不同作用域下引用别名可相同,但同一作用域下不能与原变量名相同。
多引用: 一个变量可以有多个引用,修改其中一个,其他引用指向的值也会变。
绑定问题: 引用一旦绑定某个实体,就不能再改变绑定对象(虽然可以赋值修改其值)。
#include<iostream>usingnamespace std;
intmain(){
int a = 2;
int& b = a;
int& c = a; // 也可以写成 b
cout << "变化前 a = " << a << ", b = " << b << ", c = " << c << endl;
c++; // 修改 c
cout << "变化后 a = " << a << ", b = " << b << ", c = " << c << endl;
}
4. 引用的优点
引用常用于函数传参或返回值,因为它直接操作内存,避免了拷贝开销,提高了效率。
六、const 引用
1. 概念
被 const 修饰的引用。权限只能不变或变小,不能放大。
原变量只读 -> const 引用仍只读。
原变量可读可写 -> const 引用变为只读。
intmain(){
int a = 3; // 可读可写constint& ra = a; // 只读
a = 6; // 正确,未超出原变量权限// ra = 3; // 错误,超出了 const 引用权限
}