C++编程思想--函数重载和默认参数
来源:互联网 发布:销售数据统计表 编辑:程序博客网 时间:2024/05/19 16:06
函数重载与默认参数
一、何谓函数重载
函数重载中,可以通过调用同一个函数名字达到不同的功能,但是传入的值类型或许不同。于是在C++中设置其为函数重载。
1、那么编译器是如何区分不同的参数类型的呢。编译器中采用名字修饰的概念,用不同的参数类型修饰不同的函数名,对于同一个print函数来将,就会产生_print_char和_print_int的内部名字。但是这种名字修饰是没有统一的标准的。不过是为了区分。这种情况就为我们提供了一个类型的安全连接。比如下面的例子:
First.cppvoid f(int){}Second.cppvoid f(char);int main(){f(1);}
虽然函数实际上调用的是第一个文件中的f函数,那么在C++中由于安全连接的考虑会将其变为f_inr和f_char这种类型。但是在C中是根据函数被调用的方式去推断函数的声明的,因此会编译成功。连接也会成功。这就产生了一个非常严重的后果,但是在C++中则避免了此种问题的发生。
2、我们在刚开始学的时候总是会误以为返回值的不同也是重载的一种类型。原因有2.首先在C语言中,我们调用一个函数可以忽略它的返回值。其2,用户若没有看到声明的情况下,如何知道调用的到底是哪一个函数,为了避免这个副作用,在C++中将返回值的不同不放在重载中进行考虑。
二、默认参数
在编写函数的时候为参数加上一个给定的值,可以避免在调用的时候每次都输入一样的值。这无疑减少了很大一部分的工作。那么在调用函数的时候,编译器就会自动的插上这个值。
1、一些规则:1)只有参数后部参数才是可默认的;在函数调用中开始使用默认参数,后面的参数就必须都是默认的。2)默认参数只能放在函数声明中,通常至于一个头文件中。
2、在提到默认参数,前几天在网上看到他人的代码中发现有 void fn(int n, int=0),那么这第二个就是为占位符,这种语法允许将一个参数当作占位符但是不去使用它。比如开始使用一个函数参数,但后来发现不需要使用它,那么就不需要改动那些调用该函数以前版本的程序代码。
三、两者中的选择
我们发现在使用默认的参数的时候似乎可以达到一个函数多用的状态。有点类似于重载中一个函数名字但是可以被多种方式调用。那么什么时候选用重载呢?
1、当某些值为固定值的情况下。特别是当类的调用者能够制定参数,将那些最不可能调用的默认参数放在参数表的最后面的时候。
2、将新增参数作为默认的参数的时候可以免除用户的代码收到影响
3、若参数不是固定值,且有的时候可能需要根据参数来标志决定执行函数的时候,就应该使用重载函数。
- C++编程思想--函数重载和默认参数
- C++编程思想(2nd卷一):函数重载与默认参数
- C++编程思想(2nd卷一):函数重载与默认参数
- C++编程思想学习笔记---第七章 函数重载与默认参数
- C++编程思想学习—函数重载与默认函数
- c++默认参数和函数重载
- C++学习-函数重载和默认参数
- c++函数重载和默认参数
- 17. 函数重载和默认参数
- 函数重载 / 默认参数
- 默认参数与函数重载
- 默认参数与函数重载
- C++中的引用变量、默认参数和函数重载
- C++函数的重载、内联和默认参数
- 3.8 函数的重载、内联和默认参数
- C++函数的重载、内联和默认参数
- C++函数的重载、内联和默认参数
- 读书笔记-Thinking in C++-第7章 函数重载和默认参数Function Overloading &Default Arguments
- $GLOBALS["HTTP_RAW_POST_DATA"] 说明
- hdu 4361 2013多校联合训练第3场最后一题
- sqlplus实现远程连接
- 【iOS开发】 ios开发常识 持续更新
- Hostapd-0.8.x移植到ARM Linux
- C++编程思想--函数重载和默认参数
- android 内存监控 procrank vss pss
- MacOS 内存清理的误区
- STL中set与multiset的区别
- SQL 多条件查询 IN 成功 以及 patindex用法
- ASSERT(::GetWindowLong(hWndCtrl, GWL_STYLE) & WS_GROUP);
- QuarkMail get_att.cgi 命令执行漏洞
- linux之select函数解析
- 禁用页面部分JavaScript方法