matlab function默认参数吗,C++函数默认参数(详解版)

本文详细介绍了C++中函数默认参数的使用,包括如何在函数原型中设置默认参数,以及如何在函数调用中利用默认参数。通过示例说明了默认参数的规则,如当一个实参被遗漏时,其后的所有实参也必须省略,并强调了默认参数必须是常量或常数值。此外,还展示了如何在混合使用默认和非默认参数的函数中正确调用函数。
摘要由CSDN通过智能技术生成

函数可以为形参分配默认参数,这样当在函数调用中遗漏了实际参数时,默认参数将传递给形参。

函数默认参数通常设置在函数原型中,示例如下:

void showArea(double length = 20.0, double width = 10.0);

因为在函数原型中不需要形参名称,所以示例原型也可以这样声明:

void showArea(double = 20.0, double = 10.0);

在这两种情况下,默认参数必须是常数值或常量,在它们前面有一个赋值运算符(=)。 请注意,在这两个示例原型中,showArea 函数具有两个 double 参数。第一个被赋给了默认参数 20.0,第二个被赋予默认参数 10.0。以下是函数的定义:

void showArea(double length, double width)

{

double area = length * width;

cout <

}

length 的默认实参为 20.0,width 的默认实参为 10.0。因为这两个形参都有默认实参,所以可以在函数调用中省略它们,如下所示:

showArea();

在该函数调用中,这两个默认实参将被传递给形参。形参 length 将接收值 20.0,width 将接收值 10.0。该函数的输出将是:

The area is 200

默认实参仅在调用函数时省略实际参数的情况下使用。在下面的调用语句中,指定了第一个实参,而第二个实参则被忽略:

showArea(12.0);

值 12.0 将被传递给 length,而 width 则将被传递默认值 10.0。函数的输出将是:

The area is 120

当然,所有的默认实参都可以被覆盖。在以下函数调用中,为两个形参都提供了实参:

showArea(12.0,5.5);

此函数调用的输出将为:

The area is 66

注意,函数的默认实参应在函数名称最早出现时分配,这通常是函数原型。但是,如果一个函数没有原型,则可以在函数头中指定默认实参。例如,showArea 函数可以定义如下:

void showArea(double length = 20.0, double width = 10.0)

{

double area = length * width;

cout << "The area is " << area << endl;

}

下面的程序说明了默认函数实参的用法。它有一个在屏幕上显示星号的函数,该函数接收 2 个实参,指定要显示多少行星号,以及在每一行上打印多少个星号。提供的默认实参是显示 1 行 10 个星号:

//This program demonstrates the use of default function arguments.

#include

using namespace std;

//Function prototype with default arguments

void displayStars(int starsPerRow = 10,int numRows = 1);

int main()

{

displayStars(); // starsPerRow & numRows use defaults (10 & 1)

cout << endl;

displayStars (5); // starsPerRow 5. numRows uses default value 1

cout << endl;

displayStars (7, 3); // starsPerRow 7. numRows 3. No defaults used.

return 0;

}

void displayStars(int starsPerRow, int numRows)

{

for (int row = 1; row <= numRows; row++)

{

for (int star = 1; star <= starsPerRow; star++)

cout << '*';

cout << endl;

}

}

程序输出结果:

**********

*****

*******

*******

*******

虽然 C++ 的默认实参非常方便,但它们在使用中并不完全是灵活的。当一个实参在一个函数调用中被遗漏时,它之后的所有实参也必须被省略。例如,上面程序的 displayStars 函数中,不可能只省略 starsPerRow 实参而不省略 numRows 实参,换句话说,以下函数调用是非法的:

displayStars ( , 3); // 非法函数调用

但是,使函数的某些形参有默认实参,而某些形参则没有,这是可能的。例如,在下面函数中,只有最后一个形参具有默认实参:

//函数原型

void calcPay(int empNum, double payRate, double hours = 40.0);

//函数calcPay的定义

void calcPay(int empNum, double payRate, double hours)

{

double wages;

wages = payRate * hours;

cout << "Gross pay for employee number ";

cout << empNum << " is " << wages << endl;

}

调用此函数时,必须始终为前 2 个形参(empNum 和 payRate)指定实参,因为它们没有默认实参,以下是有效调用的示例:

calcPay (769, 15.75); // 使用 hours 的默认实参

calcPay (142, 12.00, 20); //指定 hours 数字

当函数使用了带默认实参和不带默认实参这两种混合的形参时,带默认实参的形参必须最后声明,因此以下原型是非法的:

//非法原型

void calcPay(int empNum, double hours = 40.0, double payRate);

//非法原型

void calcPay(double hours = 40.0, int empNum, double payRate);

以下是关于默认实参的重点总结:

默认实参的值必须是常数值或命名常量。

当在函数调用中遗漏了一个实参时(因为它有默认值),它后面的所有实参也必须 被省略。

当函数使用了带默认实参和不带默认实参这两种混合的形参时,带默认实参的形参 必须最后声明。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值