唉 腿拉伤了 坐在床上敲代码的滋味真不好受!
/*
函数重载的关键是函数的参数列表,也称函数特征标。
若两个函数的参数数目和类型相同,同时参数的排列顺序也相同,则他们的特征标相同,变量名
则无关紧要。
一些看起来彼此不同的特征标不能共存
编译器在检查函数特征标时,将把类型引用和类型本身视为同一个特征标。
double cube( double x);
double cube( double & x);
匹配函数时,并不区分const 和 非const 变量。
void dribble(char * bits);///overloaded
void dribble(const char * cbits);///overloaded
void dabble(char * bits);///not overloaded
void drivel(const char * bits);///not overloaded
下面列出了各种函数调用的类型:
const char p1[20] = "How's the weather? ";
char p2[20] = "How's business? ";
dribble(p1);///dribble (const char *);
dribble(p2);///dribble(char *);
dabble(p1);///not match
dabble(p2);///dabble(char *);
drivel(p1);///drivel(const char *);
drivel(p2);///drivel(const char *);
***是特征标,而不是函数类型使得可以对函数进行重载。
举个栗子~~
下面的两个声明互斥
long gronk(int n, float m);///same signatures
double gronk(int n, float m);///hence not allowed
C++不允许以这种方式重载gronk().返回类型可以不同,但特征标也必须不同。
long gronk(int n,float m); ///different signatures
double gronk(float n, float m);///hence allowed
下面看个程序:*/
#include <iostream>
using namespace std;
unsigned long left(unsigned long num, unsigned ct);
char * left(const char * str, int n = 1);
int main()
{
char * trip = "Hawaii!";
unsigned long n = 12345678;
int i;
char * temp;
for(int i=1; i<10; i++)
{
cout << left(n, i) << endl;
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)
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;
}
1
H
12
Ha
123
Haw
1234
Hawa
12345
Hawai
123456
Hawaii
1234567
Hawaii!
12345678
Hawaii!
12345678
Hawaii!
Process returned 0 (0x0) execution time : 0.094 s
Press any key to continue.
函数重载不可滥用!!!
使用一个带默认参数的函数要简单些。 秩序便也一个函数而不是两个函数,程序也只需为一个函数而不是两个请求内存,需要修改函数时只需修改一个
但是,若需使用不同类型的参数,默认参数就不管用了。此情况下,应使用函数重载。