C++开发初级


865 浏览 5 years, 3 months

6.4 默认参数

版权声明: 转载请注明出处 http://www.codingsoho.com/

默认参数

C++中,默认参数与方法重载类似。在原型中可以指定函数或者方法的默认值。如果用户指定了这些参数,默认值会被忽略;如果用户忽略了这些参数,将会使用默认值。但是存在一个限制:只能从最右边的参数开始提供连续的默认参数列表,否则编译器将无法用默认参数匹配遗失的参数。 默认参数在构造函数中最有用。例如,可在Spreadsheet构造函数中设置宽度以及高度的默认值:

class Spreadsheet
{
 public:
  Spreadsheet(const SpreadsheetApplication& theApp,
          int inWidth = kMaxWidth, int inHeight = kMaxHeight);
};

代码取自 SpreadsheetDefaultParams\Spreadsheet.h

Spreadsheet构造函数的实现不变。注意只在方法声明中指定了默认参数,在定义中没有这么做。现在可以用1个、2个或者3个参数调用Spreadsheet构造函数,尽管只有一个非复制构造函数:

  SpreadsheetApplication theApp;
  Spreadsheet s1(theApp);
  Spreadsheet s2(theApp, 5);
  Spreadsheet s3(theApp, 5, 6);

代码取自 SpreadsheetDefaultParams\SpreadsheetTest.cpp

所有参数都有默认值的构造函数等同于默认构造函数。也就是说,可以构建类的对象而不指定任何参数。如果试图同时声明默认构造函数以及具有多个参数并且所有参数都有默认值的构造函数,编译器会报错,因为如果不指定任何参数,编译器不知道该调用哪个构造函数。

注意,任何默认参数能做到的事情都可以用方法重载做到。您可以编写3个不同的构造函数,每个都具有不同数量的参数。然而,默认参数允许您在一个构造函数中使用三个不同数量的参数。您应该使用感觉最舒适的机制。