函数重载

唉 腿拉伤了 坐在床上敲代码的滋味真不好受!

/*
函数重载的关键是函数的参数列表,也称函数特征标。
若两个函数的参数数目和类型相同,同时参数的排列顺序也相同,则他们的特征标相同,变量名
则无关紧要。
一些看起来彼此不同的特征标不能共存
编译器在检查函数特征标时,将把类型引用和类型本身视为同一个特征标。
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.

函数重载不可滥用!!!

使用一个带默认参数的函数要简单些。 秩序便也一个函数而不是两个函数,程序也只需为一个函数而不是两个请求内存,需要修改函数时只需修改一个

但是,若需使用不同类型的参数,默认参数就不管用了。此情况下,应使用函数重载。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值