一、函数重载概念
函数重载
//举例:函数名相同
open(const char *filename);
open(const chart *filename, int flag);
说明:如果在一个文件中出现同名的函数,只要这两个函数的参数列表(形式参数)不同。可以是参数个数不同,参数的数据类型不同,这类函数就叫:函数可重载。**
二、重载的鉴别
重载鉴别:
1.同数据类型,参数个数不同
void add(int a)
void add(int a, int b)//可以,参数个数必须不同
2.参数数据类型不同
void add(int a);
void add(float a); //可以
3.函数返回值不可以作为重载依据,返回值不可以
void add(int a);
int add(int a);//错误的
三、函数重载缺省值的用法<难点>
函数重载之缺省值(int flag =0)
在main()函数上的写法:
要从右往左看,右边参数赋值,左边可有可无,但是左边赋值,右边必须已经赋值
void open(const char *fileName, int flag=0);
void open(const char *fileName, int flag);
可以设置多个缺省值:
void open(const char *name, int flag_1,int flag_2,int falg_3=10);
错误示范如下:
void open(const char *name,
int flag_1 = 1,int flag_2,int falg_3=10);
void open(const char *fileName,int flag_1 =1,int flag_2=3,int flag);
void open(const char *fileName, intflag_1,int flag_2=3,int flag);
正确示范如下:
void open(const char *fileName, int flag_1 ,int flag_2,int flag =10);
方法
:从右到左,缺省值需要连续(统一赋值,最后一个赋值,前面的必须连续(赋值,不赋值))
简单理解:从右往左,左边的形式必须和右边的一致
;
四、函数交换两个值
通过指针和引用可以保留形式参数到实际参数的有效值,交换方便,不易出错。
五、交换代码
//引用传参
int &add(int &a,int &b)
{
static int c; //静态局部变量保留数据,本函数结束不影响
c=a+b;
return c;
}
//指针传参
int *add(int *a,int *b)
{
int *c = new int[1];
*c=*a+*b;
return c;
}
六、 函数重载总代码
#include <iostream>
using namespace std;
int c;
//直接传参
int add(int a, int b)
{
//static int c=a+b;
return c=(a+b);
}
float add(float a,float b,float c)
{
float v;
v=a+b+c;
return v;
}
//函数缺省 ()
void open(const char *name, int flag_1 ,int flag_2=0)
{
cout<<"name="<<name<<"\nflag_1="<<flag_1<<"\nflag_2="<<flag_2<<endl;
}
int main(int argc, char const *argv[])
{
//解引用传参
// int a=1,b=2;
// int &a1=a;
// int &b1=b;
// int &c=add(a1,b1);
//地址传参
// int a=25555555,b=20000000;
// int *p = add(&a,&b);
// cout<<"*p="<<*p<<endl;
//直接传参
int a=1;
int b=2;
int c=add(a,b);
cout<<"c="<<c<<endl;
// cout<<"c="<<c<<endl;
float vv=add(1.11,1.22,1.12);
cout<<"vv="<<vv<<endl;
**//如果传入缺省值,值为传入的缺省值,**
**//不传入的话,函数缺省值必须赋初值**
open("hello world",10);
return 0;
}
结果
PS C:\Users\newuser\Desktop\C++\第三天C++> g++ .\function_Overload.cpp
PS C:\Users\newuser\Desktop\C++\第三天C++> ./a
c=3
vv=3.45
name=hello world
flag_1=10
flag_2=0