重载函数_值传递的三种方式

重载函数_值传递的三种方式出现在相同的作用域中的两个函数,如果具有相同的名字而形参表不同。则称为 重载函数(overloaded function)任何程序都仅有一个main 函数的实例。main 函数不能重载函数重载和重复声明的区别如果两个函数声明的返回类型和形参表完全匹配,则将第二个函数声明视为第一个的重复定义。如果两个

重载函数_值传递的三种方式

出现在相同的作用域中的两个函数,如果具有相同的名字而形参表不同。则称为 重载函数(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   
 
 
 
 

今天的文章重载函数_值传递的三种方式分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:http://bianchenghao.cn/48825.html

(0)
编程小号编程小号
上一篇 2023-09-03 18:17
下一篇 2023-09-03

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注