函数重载可以使用多个同名的函数,示例如下:
#include<iostream>//函数重载是一个函数用多个函数的形式进行调用
using namespace std;
unsigned long left(unsigned long num,unsigned ct);//重载函数
char *left(const char *str,int n = 1);//用const修饰的形参
int main()
{
char * trip = "Hawaii!!";//用一个字符串指针变量
unsigned long n = 12345678;
int i;
char *temp;
for(i = 1;i < 10; i++)
{
cout<<left(n,i)<<endl;//调用函数left,十次
temp = left(trip,i);
cout<<temp<<endl;
delete[]temp;//指针会开辟一个新的内存,需要删除
}
return 0;
}
unsigned long left(unsigned long num,unsigned ct)//数字拆解
{
unsigned digits = 1; 计数
unsigned long n = num;
if(ct == 0||num == 0)
return 0;
while(n/=10)
digits ++;
if(digits > ct)
{
ct = digits - ct;
while(ct--)
num/=10;
return num;
}
else
return num;
}
char * left(const char *str,int n)//会自动匹配一个字符串变量的函数,首先分析形参,左为字符串,右为字符串的长度
{
if(n<0)//如果字符串的长度已经变为小于0
n = 0;
char *p = new char[n+1];//开辟一个新的字符数组
int i;
for(i = 0;i < n&& str[i]; i++)
{
p[i] = str[i];//将字符串拷贝到新开辟的数组中
}
while(i<=n)
{
p[i++] = '\0';//因为是新开辟的数组,需要加上终止符号
}
return p;
}
函数重载虽然很诱人,但是不能滥用。仅当函数基本上执行相同的任务时,但是用不同形式的数据时,才应该使用函数重载。