【五】C++函数的升级(二)
2015-08-15 11:47
246 查看
目录
目录1函数默认参数
2函数占位参数
1、函数默认参数
C++中可以在函数声明时为参数提供一个默认值,当函数调用时没有指定这个参数的值,编译器会自动用默认值代替只有参数列表后面部分的参数才可以提供默认参数值
一旦在一个函数调用中开始使用默认参数值,那么这个参数后的所有参数都必须使用默认参数值
示例:
exp-1.cpp
#include <stdio.h> int add(int a, int b = 0, int c = 0, int d = 0) { return a + b + c; } int main(int argc, char *argv[]) { printf("add(2) = %d\n", add(2)); printf("add(1, 2) = %d\n", add(1, 2)); printf("add(1, 2, 3) = %d\n", add(1, 2, 3)); return 0; }
运行结果:
2、函数占位参数
在C++中可以为函数提供占位参数占位参数只有参数类型声明,而没有参数名声明
一般情况下,在函数体内部无法使用占位参数
占位参数也属于参数,因此在调用函数时也必须要提供实参
示例:
exp-2.cpp
#include <stdio.h> int func(int a, int b, int) { return a + b; } int main(int argc, char *argv[]) { //调用时必须要提供三个实参,尽管第三个占位参数无法使用 printf("func(1, 2, 3) = %d\n", func(1, 2, 3)); return 0; }
运行结果:
思考:
C++支持这样的函数占位参数有什么意义?
可以将占位参数与默认参数结合起来使用
意义
为以后程序的扩展留下线索
兼容C语言程序中可能出现的不规范写法
示例:
exp-3.cpp
#include <stdio.h> //占位参数与默认参数结合使用 //这样调用时,可只传递两个实参 int func(int a, int b, int = 0) { return a + b; } int main(int argc, char *argv[]) { //调用 printf("func(1, 2) = %d\n", func(1, 2)); return 0; }
Tip:
兼容C的不规范写法,示例:
exp-4.c
#include <stdio.h> int func() { return 1; } int main(int argc, char *argv[]) { printf("func() = %d\n", func()); printf("func(1) = %d\n", func(1)); return 0; }
在C语言中,以上程序是合法的,能编译通过,但是在C++中,以上程序就变得不合法了,那么改正的方法也很简单,直接使用占位参数+默认参数即可,如下:
#include <stdio.h> int func(int = 0) { return 1; } int main(int argc, char *argv[]) { printf("func() = %d\n", func()); printf("func(1) = %d\n", func(1)); return 0; }
相关文章推荐
- C++中delete和delete[]的区别
- C++基础---简介
- C++中的三大件
- C语言:链接属性与存储类型
- 使用C语言解决字符串全排列问题
- C++中对象初始化
- c++读取文本文件
- 顺序表的C语言实现
- C/C++笔记(一) 2015/8/15
- C++ 遍历所有文件和文件夹,建立文件夹
- 【四】C++函数的升级(一)--内联函数
- C++ 内存分布
- Majority Element && Majority Element II
- 八皇后问题的相关C++代码解答示例
- C++11的特性
- C++ Primer : 第九章 : 顺序容器的操作以及迭代器失效问题
- C++ Primer 学习笔记与思考_5 bitset你用的正确吗?
- 关于C++中返回值是数组类型失败的问题
- VC++模态对话框和非模态对话框
- C++在设计和使用智能指针