出现在相同的作用域中的两个函数,如果具有相同的名字而形参表不同。则称为 重载函数(overloaded function)
任何程序都仅有一个main 函数的实例。main 函数不能重载
函数重载和重复声明的区别
如果两个函数声明的返回类型和形参表完全匹配,则将第二个函数声明视为第一个的重复定义。
如果两个函数的形参表完全相同,但返回类型不同,则第二个声明是错误的。(然而 使用const 是可以被重载 的)
函数不能仅仅基于不同的返回类型而实现重载,但是可以基于const (常量性) 被重载。
————————————————————
Record lookup(Phone) ;
Record lookup(const Phone); // redclaration 重复声明
这个区别仅仅在于是否将形参 定义为const . 这种差异并不影响传递至函数的对象;第二个函数声明被视为第一个的重复声明。其原因在与实参传递的方式。
复制形参时并不考虑形参是否未const —- 函数操纵的只是副本。函数无法修改实参。 结果,即可将const 对象传递给 const 形参,也可传递给 非const 形参。两种形参并无本质区别。
然而,值得注意的是,形参与const 形参 的等价性 仅仅适用于 非引用形参。
有 const 引用形参的函数与有非const 引用形参的函数式不同的。类似的,如果函数带有指向 const 类型的指针形参, 则与带有指向相同类型的非const对象的指针形参的函数不相同。
可以基于函数的引用形参时指向const 对象还是 非const 对象,实现函数重载。
Record lookup(Account &);
Record lookup(const Account &); // ok , new function
const Account a(0);
Account b;
lookup(a); // calls lookup(const Account&)
lookup(b);// calls lookup( Account &)
const 在 * 左边,说明指向的物 为const 不能变 。 *p =0 // error ////
const 在 * 右边。 说明指针本身为 const 指针不能变,但是指向的物可以变 ++p// error;
然而注意 不能基于 指针本身是否未const 来实现函数的重载:
f(int *)
f(int * const) //重复声明
此时const 用于修饰指针本身,而不是修饰指针所指向的类型。两种情况都复制了指针,
指针本身是否为const 并没有带来区别, 当形参以副本传递时候,不能基于形参是否未const 来实现重载。
int cal(int, int);
int cal(const int&, const int &); //ok
int calc(char * ,char *)
int calc(const char* , const char *);// ok
int calc(char* char*);
int calc(char* const , char *const);// error
今天的文章重载函数_值传递的三种方式分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/48825.html