最新消息:XAMPP默认安装之后是很不安全的,我们只需要点击左方菜单的 "安全"选项,按照向导操作即可完成安全设置。

那些年C++ 函数之缺省参数

XAMPP相关 admin 807浏览 0评论

第17章:C++ 函数缺省参数

在此篇教程中,我们将通过示例程序来学习 C++ 函数之默认参数(又叫缺省参数)及其工作。

在 C++ 编程中,我们可以为函数参数提供默认值。

如果在不传递参数的情况下调用具有默认参数的函数,则使用默认参数。

但是,如果在调用函数时传递参数,则会忽略默认参数。


函数|默认参数工作过程

dra0091

默认参数如何在 C++ 中工作

显然,从上图中可以理解默认参数的工作方式:

  1. 调用 temp() 时,函数使用两个默认参数。
  2. 调用 temp(6) 时,第一个参数变为 6,而第二个参数使用默认值。
  3. 当调用 temp(8, -8.8) 时,两个默认参数都被覆盖,导致 i = 8f = -8.8
  4. 当调用 temp(1.88) 时,该函数则会以一种错误的方式运行,因为不传递第一个参数就无法传递第二个参数。因此,1.88 作为第一个参数传递。由于第一个参数已定义为 int,因此实际传递的值为 1


示例:函数之默认参数

#include <iostream>
using namespace std;

// 定义默认参数
void display(char = '*', int = 3);

int main() {
    int count = 5;

    cout << "无参数传递 ";
    // *, 3 将是参数
    display(); 

    cout << "第一个参数传入: ";
     // #, 3 将是参数
    display('#'); 

    cout << "两个参数传入: ";
    // $, 5 将是参数
    display('$', count); 

    return 0;
}

void display(char c, int count) {
    for(int i = 1; i <= count; ++i)
    {
        cout << c;
    }
    cout << endl;
}

输出:

无参数传入: ***
第一个参数传入: ###
两个参数传入: $$$$$

以下是该程序的工作过程:

  1. display() 被调用而不传递任何参数。在这种情况下,display() 使用默认参数 c = '*'count = 3
  2. display('#') 只用一个参数调用。在这种情况下,第一个变为'#'。保留第二个默认参数 count = 3
  3. display('#', count) 用两个参数调用。在这种情况下,不使用默认参数。

我们还可以在函数定义本身中定义默认参数。下面的程序与上面的程序等效。

#include <iostream>
using namespace std;

// 定义默认参数
void display(char c = '*', int count = 3) {
    for(int i = 1; i <= count; ++i) {
        cout << c;
    }
    cout << endl;
}

int main() {
    int count = 5;

    cout << "无参数传入: ";
    // *, 3 将是参数
    display(); 

    cout << "第一个参数传入: ";
     // #, 3 将是参数
    display('#'); 

    cout << "两个参数都传入: ";
    // $, 5 将是参数
    display('$', count); 

    return 0;
}

但要注意的事:

  1. 一旦我们为参数提供了默认值,所有后续参数也必须具有默认值。例如:
    // 非法
    void add(int a, int b = 3, int c, int d);
    
    // 非法
    void add(int a, int b = 3, int c, int d = 4);
    
    // 非法
    void add(int a, int c, int b = 3, int d = 4);
  2. 如果我们在函数定义而不是函数原型中定义默认参数,那么函数必须在函数调用之前定义。
    // 非法代码:display()函数未声明
    
    int main() {
        // 函数调用
        display();
    }
    
    void display(char c = '*', int count = 5) {
        // 代码
    }

 

 

 

程序算法实验室 zhangJA-Lab

转载请注明:XAMPP中文组官网 » 那些年C++ 函数之缺省参数

您必须 登录 才能发表评论!