c++整理--函数重载

一、为什么C语言不支持函数重载而c++能支持

什么是函数重载?为什么C语言不支持函数重载,而c++能支持函数重载?

解析:

  函数重载是用来描述同名函数具有相同或者相似的功能,但数据类型或者是参数不同的函数管理操作。在C语言里需要写两个不同名称的函数来进行区分。

    #include <iostream>  
      
    using namespace std;  
      
    class Test  
    {  
    public:  
        int add(int x, int y)           //相加,传入参数以及返回值都是int  
        {  
            return x+y;  
        }  
        float add(float x, float y)     //相加,传入参数以及返回值都是float  
        {  
            return x+y;  
        }  
    };  
      
    int add(int x, int y)               //相加,传入参数以及返回值都是int  
    {  
        return x+y;  
    }  
      
    float add(float x, float y)         //相加,传入参数以及返回值都是float  
    {  
        return x+y;  
    }  
      
    int main()  
    {  
        int i = add(1, 2);  
        float f = add(1.1f, 2.2f);  
        Test test;  
        int i1 = test.add(3, 4);  
        float f1 = test.add(3.3f, 4.4f);  
          
        cout<<"i = "<<i<<endl;  
        cout<<"f = "<<f<<endl;  
        cout<<"i1 = "<<i1<<endl;  
        cout<<"f1 = "<<f1<<endl;  
          
        return 0;  
    }  
上面的程序中使用了全局函数和类成员函数的重载,代码30~39行是对它们的调用与测试。可以看到,在c++中可以根据传入参数类型和返回类型来区分不同的重载函数。

  C语言不支持函数重载,c++却支持,为什么呢?这是因为c++的重载函数经过编译器处理之后,两个函数的符号是不相同的。例如代码第18行的add函数,经过处理后变成了_int_add_int_int之类,而后者变成了_float_add_float_float之类。这样的名字包含了函数名、函数参数数量及返回类型信息,c++就是靠这种机制来实现函数重载的。

总结:

  函数重载是用来描述同名函数具有相同或者相似的功能,但数据类型或者是参数不同的函数管理操作。

  函数名经过c++编译器处理后包含了原函数名、函数参数数量及返回类型信息,而C语言不会对函数进行处理。

    (A) int calc(int, int);  
        int cale(const int, const int);  
      
    (B) int get();  
        double get();  
          
    (C) int *reset(int*);  
        double *reset(double*);  
          
    (D) extern "C" int compute(int *, int);  
        extern "C" double compute(double*, double);  

A错误。第二个函数被视为重复声明,第二个声明中的const修饰词会被忽略。

B错误。第二个声明是错误的,因为单就函数的返回值而言,不足以区分两个函数的重载。

C正确。这是合法的声明,reset()函数被重载。

D错误。第二个函数声明是错误的,因为在一组重载函数中,只能有一个函数被指定为extern "C"


三、重载和覆写有什么区别

  重载是指子类改写了父类的方法,覆写是指同一个函数的不同版本之间参数不同。

  重载是编写一个与已有函数同名但是参数表不同(参数数量或参数类型不同)的方法,它具有如下特征:

(1)方法名必须相同。

(2)参数列表必须不相同,与参数列表的顺序无关。

(3)返回值类型可以不相同。

  覆写是派生类重写基类的虚函数,它具有如下如示的特征。

(1)只有虚函数的抽象方法才能被覆写。

(2)相同的函数名

(3)相同的参数列表

(4)相同的返回值类型

  重载是一种语法规则,有编译器在编译阶段完成,不属于面向对象编程;而覆写是由运行阶段决定的,是面向对象编程的重要特征。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值