如果有个头文件声明了一个函数(只写了有这个函数,没有具体去写出函数的具体内容),然后让另一个源文件去补充说明它的内容
//比如先自己写个头文件test.h
int add(int a,int b)
//源文件a.cpp
int add(int a,int b){
return a+b;
}
//源文件b.cpp
#include<iostream>
using namespace std;
int main(){
cout<<add(1,2);
return 0;
}
那么运行结果是1+2=3。那如果有缺省呢?
//比如先自己写个头文件test.h
int add(int a=10,int b=20)
//源文件a.cpp
int add(int a,int b){
return a+b;
}
//源文件b.cpp
#include<iostream>
using namespace std;
int main(){
cout<<add();//10+20=30
cout<<add(1,2);//1+2=3
return 0;
}
再看一下下面这个情况
//比如先自己写个头文件test.h
int add(int a,int b)
//源文件a.cpp
int add(int a=10,int b=20){
return a+b;
}
//源文件b.cpp
#include<iostream>
using namespace std;
int main(){
cout<<add();//报错
cout<<add(1,2);//1+2=3
return 0;
}
因此,缺省可以用在声明(类似头文件)中,但是不能用在定义(其他源文件)中!
下面讲重载
重载函数:函数名必须相同,参数必须有不同(类型,个数,顺序),返回值可以相同,下面举例子
double compare(int,doube)//主函数
int compare(double,double)//构成重载
double compare(double,double)//构成重载
double compare(int,double,int)//构成重载
double compare(double,int)//构成重载
int compare(int,int)//不构成重载,因此构不构成重载是不看返回值的,只看函数名是否相同和后面的参数是否相同
下面讲引用
#include<iostream>
using namespace std;
int main(){
int a=0;
int&b=a;
int&c=b;
cout<<a<<endl;
b++;
cout<<a<<endl;
c++;
cout<<a<<endl;
return 0;
}//输出0,1,2
注意给一个变量引用之后不能改变引用对象,不然会报错,如下
#include<iostream>
using namespace std;
int main(){
int a=0;
int&b=a;
int x=10;
int&b=x;//报错
cout<<b<<end;
return 0;
}