您的位置:首页 > 编程语言 > C语言/C++

【五】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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: