C++ 默认参数和虚函数
如果调用函数没有为参数提供值,编译器会自动分配函数声明中指定的默认参数的值。如果传递了任何值,将覆盖默认值。
这是一个简单的C++示例,展示了如何使用默认参数。因为只有一个函数使用第三个和第四个输入的默认值,在这种情况下我们不需要构造三个求和函数。
示例
#include
using namespace std;
int sum(int x, int y, int z = 0, int w = 0)
{
return (x + y + z + w);
}
int main()
{
cout << sum(10, 15) << endl;
cout << sum(10, 15, 25) << endl;
cout << sum(10, 15, 25, 30) << endl;
return 0;
}
默认参数的关键点是什么
- 由于默认参数可以根据需要进行调整,因此它们与无法更改的常量参数不同。
- 当调用函数为它们提供值时,默认参数将被替换。当调用函数sum(10, 15, 25, 30)时,参数z和w的重要性将被分别替换为25和30。
- 当调用一个函数时,参数从调用者函数向被调用进程的方向传递。只有w的默认值被使用时,sum(10, 15, 25)会将值10、15和25分别赋给x、y和z。
- 一旦在函数声明中为参数指定了默认值,那么默认值必须适用于后续的所有参数。默认参数的赋值是从右到左进行的。例如,下面的函数声明是不正确的,因为对默认变量z的后续参数不是默认值。
默认参数的优点是什么
- 当扩展现有函数的功能时,默认参数很有用,因为我们只需向函数中添加一个新的默认参数。
- 它提供了一种直接且高效的编程方法。
- 它有助于使程序变得更小。
- 默认参数增加了程序的一致性。
默认参数的缺点是什么
- 编译器必须使用默认值替换函数调用中省略的参数,这会延长执行时间。
什么是虚函数
虚函数是在基类中定义并在派生类中重新定义(覆盖)的成员函数。当使用指向基类的指针或引用引用派生类的对象时,可以调用该对象的虚函数,并执行派生类的版本。
- 无论使用什么类型的引用(或指针)来调用函数,虚函数都确保为对象调用正确的函数。
- 它们的主要用途是实现运行时多态。
- 在基类中,函数使用virtual关键字声明。
- 进行函数调用的运行时解析。
虚函数的规则是什么
- 它们总是在基类中指定并在派生类中被替换。如果派生类不覆盖或重新定义虚函数,则使用基类的函数。
- 虚函数在基类和任何派生类中的原型应该相同。
- 类中不允许使用虚构造函数,但允许使用虚析构函数。
- 为了实现运行时多态性,应通过基类类型的指针或引用来访问虚函数。
- 静态操作不能是虚拟的。
- 一种友元函数对另一个类是虚函数。
虚函数可以有默认参数吗
虚函数与常规函数没有区别,因为它们可能有默认参数。当使用默认参数调用函数时,使用静态类型的参数定义作为其值。
换句话说,当通过引用或指针到基类进行调用时,默认参数将是在基类中声明的那些参数。即使调用派生版本的函数,仍然会使用基类的参数。在这种情况下,将为派生函数提供基类版本函数的默认参数。如果派生函数需要不同的参数,则程序将无法按预期运行。