#include<iostream>usingnamespace std;
voidPrint(int a, int b = 1, int c = 2){
cout << a << "," << b << ","<< c << endl;
}
intmain(){
//Print(); // 没有传够参数,会触发编译错误Print(0); // 打印 0,1,2 半缺省起码传一个Print(6,6); // 打印 6,6,2Print(5,5,5); // 打印 5,5,5
}
函数声明和定义分离时,函数的缺省参数只能出现一次,且出现在声明部分。
#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
}
#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);
double b = Calc(2.2, 2);
cout << a << endl;//a 的参数第一个是整型,第二个是浮点型,所以调的是加法函数 (4.2)
cout << b << endl;//b 的参数第一个是浮点型,第二个是整型,所以调的是减法函数 (0.2)
}
五、引用(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)引用的要求
①初始化
对于局部/全局使用引用时必须进行初始化。比如顺序表的初始化,在 main 函数内部使用引用。
#include<iostream>usingnamespace std;
intmain(){
int a = 10;
int& b = a; // 引用时必须进行初始化
cout << &a << endl;
cout << &b << endl; // 在这里可以看到 a,b 是同一个地址
}
#include<iostream>usingnamespace std;
intmain(){
int a = 2;
int& b = a;
int& c = a; // 这里可以写 a 也可以写 b
cout << "变化前" << a << ","<<b << "," << c << endl;
c++;
cout << "变化后" << a << "," << b << "," << c << endl; // 这里可以观察到//a,b,c 的值均发生了变化
}