小学生学C++编程语法知识(C++函数 :8、默认参数)
C++函数 第八课
《神奇的备用方案——默认参数(Default Arguments)》
本课学习目标
学完本课,同学们能够:
✅ 理解什么是默认参数
✅ 会编写带默认参数的函数
✅ 知道什么时候使用默认值
✅ 理解默认参数的调用规则
✅ 掌握默认参数的注意事项
第一幕:程序王国的新工厂
1、今天,程序王国建了一家新的工厂。
叫:
打印星星工厂。
2、汉克老师写:
void printStar(int n) { for(int i=1;i<=n;i++) cout<<"*"; cout<<endl; }调用:
printStar(5);输出:
*****同学们都会。
3、可是。
国王说:
"大多数时候,我只想打印1颗星星。"
难道每次都要写:
printStar(1);是不是有点麻烦?
有没有办法:
什么都不写,也默认打印1颗?
第二幕:聪明的工厂
1、魔法师来了。
他说:
"如果没人告诉工厂打印几颗星星。"
"那就自己决定。"
2、他写下了:
void printStar(int n = 1)这里:
=1就是:
默认参数。
3、意思就是:
如果没有送数字。
就自己使用1。
第三幕:第一次体验默认参数
1、看代码:
#include <iostream> using namespace std; void printStar(int n = 1) { for(int i=1;i<=n;i++) cout<<"*"; cout<<endl; } int main() { printStar(); printStar(5); printStar(8); return 0; }运行结果:
* ***** ********2、为什么第一句:
printStar();还能运行?
因为:
没有参数。
程序自动用了:
n=1第四幕:默认参数像备用方案
1、画图。
(1)调用:
printStar();(2)流程:
有没有参数? ↓ 没有 ↓ 使用默认值1(3)如果:
printStar(6);(4)流程:
有没有参数? ↓ 有 ↓ 使用6 ↓ 忽略默认值2、总结:
默认值只有在没有提供参数时才会使用。
第五幕:生活中的默认设置
1、手机闹钟。
默认:
铃声: 默认铃声如果:
自己改。
就是:
铃声: 音乐否则:
一直使用默认铃声。
默认参数。
就是这样。
2、打印机。
默认:
打印1份如果:
输入:
打印5份当然:
打印5份。
同学们还能说出几个生活中的例子呢?
第六幕:多个参数
1、看代码
void student(string name, int age=10)(1)调用:
student("小明");(2)输出:
小明 10(3)再调用:
student("小红",12);(4)输出:
小红 122、画图。
名字: 必须告诉 年龄: 可以不告诉第七幕:设置多个默认参数还能继续吗?
1、例如:
void game(int level=1, int hp=100, int money=0)(1)调用:
game();得到:
1 100 0(2)调用:
game(3);得到:
3 100 0(3)调用:
game(3,80);得到:
3 80 0(4)调用:
game(3,80,500);得到:
3 80 5002、同学们会发现:
参数是:
从左到右依次填写。
第八幕:为什么默认参数必须放后面?
1、如果是:
void test(int x=1,int y)这样对吗?
2、答案:
❌ 错误!
3、为什么?
举例,调用:
test(5);(1)到底:
x=5 y?(2)还是:
x=1 y=5?程序根本不知道。
4、所以规定:
默认参数只能放在后面。
正确:
void test(int x, int y=1)或者:
void test(int x, int y=1, int z=2)错误:
void test(int x=1, int y)以及:
void test(int x=1, int y, int z=3)5、总结口诀:
默认参数站最后,前面不能有空位。
第九幕:默认参数写在哪里?
1、汉克老师告诉大家:
如果函数只有定义。
可以这样写:
void print(int n=1) { }2、但是如果有声明。
推荐:
写在声明里。
(1)例如:
void print(int n=1);定义:
void print(int n) { }(2)解释:
默认参数一般只写一次,通常写在函数声明中。
(这是一个良好的编程习惯。)
第十幕:默认参数有什么好处?
1、以前写:
printStar(1);现在。
直接:
printStar();更加简单。
2、以后,很多大型程序。
都会大量使用。
例如:
画图。
游戏。
机器人。
第十一幕:课堂综合案例
1、欢迎系统
#include<iostream> using namespace std; void welcome(string name="游客", int age=10) { cout<<"欢迎 "<<name<<endl; cout<<"年龄 "<<age<<endl; } int main() { welcome(); welcome("小明"); welcome("小红",12); return 0; }2、输出:
欢迎 游客 年龄 10 欢迎 小明 年龄 10 欢迎 小红 年龄 123、默认参数就是:
没有提供。
自动补上。
第十二幕:课堂小游戏
1、给出函数:
void fun(int a, int b=2, int c=3)问:
下面哪些调用是正确的?
①
fun(5);✅
②
fun(5,6);✅
③
fun(5,6,7);✅
④
fun();❌
为什么?
因为:
第一个参数。
没有默认值。
必须提供。
⑤
fun(5,,7);❌
不能跳过中间参数。
本课总结
今天,我们学习了函数的默认参数。请记住六句话:
默认参数就是参数的备用值。
调用函数时,如果没有提供实参,就使用默认值。
如果提供了实参,就使用实参,不使用默认值。
默认参数必须从右向左连续设置,不能把没有默认值的参数放在默认参数后面。
调用函数时,参数不能跳着填写,只能从左到右依次对应。
一般情况下,默认参数写在函数声明中,而不是声明和定义都写。
课后挑战
1、请完成下面函数:
void drawBox(int width = 5, char ch = '*');2、要求:
drawBox(); 输出: *****drawBox(8); 输出: ********drawBox(6,'#'); 输出: ######3、思考:
为什么下面的调用是错误的?
drawBox('*');提示:第一个参数是width(整数类型),第二个参数才是ch(字符类型)。如果只写一个参数,编译器会把它当作第一个参数来匹配,因此类型不符合。
这一课的难点不是语法,而是参数匹配规则。建议始终围绕下面这张图讲解:
void fun(int a, int b = 2, int c = 3);| 调用方式 | a | b | c |
|---|---|---|---|
fun(5) | 5 | 2 | 3 |
fun(5,6) | 5 | 6 | 3 |
fun(5,6,7) | 5 | 6 | 7 |
大家反复练习"参数是如何一个一个对应"的过程。
