首页 > 编程知识 正文

重载函数在调用时,在下列选择的依据中,()是错误的,重载函数函数名相同,参数类型或个数不同

时间:2023-05-06 05:53:58 阅读:262961 作者:1721

一、重载函数

(1)对于重载的函数来说, 它们应该在形参数量或形参类型上有所不同。

(2)类成员函数的声明为const和非const也是重载

(3)main函数不能重载

(4)只有返回类型不同不算重载

二、顶层const不影响传入函数的对象,一个拥有顶层const的形参无法和另一个没有顶层const的形参区分开来 :

Record lookup(Phone);Record lookup(const Phone);//报错//重复声明了Record lookup (Phone) Record lookup(Phone*);Record lookup(Phone* const);//报错//重复声明了Record lookup (Phone*)

三、另一方面,如果形参是某种类型的指针或引用,则通过区分其指向的是常量对象还是
非常量对象可以实现函数重载,此时的const是底层的 :

//对于接受引用或指针的函数来说,对象是常量还是非常量对应的形参不同.//4个独立的重载函数Record lookup(Account&);//函数作用于Account的引用Record lookup(const Account&);// 新函数, 作用于常量引用Record lookup(Account*);//新函数,作用于指向Account的指针Record lookup(const Account*);//新函数,作用于指向常量的指针

四、当我们传递一个非常量的对象或者指向非常量对象的指针时,编译器会优先选择非常量版本的函数。

我们只能把const对象传给const形参,但是可以把非const对象传给const形参(非const可以转换为const)

/*如果重载函数的区别在于它们的引用类型的形参是否引用了const, 或者指针类型的形参是否指向const则当调用发生时编译器通过实参是否是常量来决定选择哪个函数 :*/Record lookup(Account&); // 函数的参数是Account的引用Record lookup(const Account&); //函数的参数是一个常量引用int main() { const Account a; Account b; lookup(a); //调用lookup (const Account&) lookup(b); //调用lookup (Account&)}

五、重载函数的指针

当我们使用重载函数时,上下文必须清晰的界定到底使用哪个函数

//如果定义了指向重载函数的指针void ff(int*);void ff(unsigned int);void (*pf1) (unsigned int) = ff; // pf1指向ff (unsigned)//编译器通过指针类型决定选用哪个函数,指针类型必须与重载函数中的某一个精确匹配void (*pf2) (int) = ff;//错误:没有任何一个ff与该形参列表匹配.double (*pf3) (int*) = ff;//错误: ff和pf3的返回类型不匹配

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。