C++重载细究

    xiaoxiao2023-12-02  165

    首先,重载只和“参数”“const”有关。和返回值无关。

    static在重载函数中

     

    无法重载,报错,但如果只有一个static int name(a,b,c)是可以的。

     

    const在重载中

    const修饰变量

     

    其次,如果是简单如const int和int直接不能构成重载,因为函数传参过程无法确定const int和int

    但是 char * a和const char* a是区分的,char *a 中a指向的是一个字符串变量,而const char *a指向的是一个字符串常量,所以当参数为字符串常量时,调用第二个函数,而当函数是字符串变量时,调用第一个函数。

    对于引用,比如int &i 和const int & i 也是可以重载的,原因是第一个i引用的是一个变量,而第二个i引用的是一个常量

    const修饰函数

     

    看下面代码,首先

    非成员函数不能使用。

    下面例子则构成重载

    char myoverload(int a, int b)const { cerr << "第二个"; return a + b; } /* const 的是对函数的一个限定,使其无法修改类内的数据成员。const告诉别人这个函数不会 改变对象的状态。 声明一个函数用 const 关键字来说明这个函数是一个只读函数(read only method), 即不会修改任何的数据成员也就是不会改变该对象的状态。该类函数的声明和定义时都要加上 const 关键字。 */ int myoverload(int a = 1, int b = 1) { cerr << "第三个"; return a + b; }

    缺省参数在重载中

    函数个数和类型相同,一个缺省,一个不缺省时

    调用时会出错

    fun(int a,int b)和fun(int a,int b=10) 不构成重载,本质还是同一函数

     函数个数和类型不相同时

    如下代码,则构成重载,但是函数调用时

    会报错的,无法运行,但这个和重载无关了,相当于第二个函数无法使用。

    class testload { int myoverload(int a, int b, int c = 10) { cout << "第一个函数"; return a + b + c; } char myoverload(int a, int b) { cerr << "第二个"; return a + b; }

     

    最新回复(0)