【问题标题】:Constructor with Default Arguments具有默认参数的构造函数
【发布时间】:2017-09-27 19:47:20
【问题描述】:

这段代码到底在做什么?

这是我正在阅读的一本 c++ 书中的构造函数,它掩盖了到底发生了什么。

Derived(int a=0, int b=0) : Base(a), dNum(b){
    cout<< "Derived constructor." <<endl;
}

因此它将 a 和 b 传递到该代码派生的类的基本构造函数中。但是 "int a=0, int b=0" 是怎么回事? 如果创建的对象只有 1 个参数或没有参数,我们是否将它们设置为零?如果是这样,一旦我们离开作用域,a 和 b 就不会消失,或者在它们已经传递到基类之后会发生这种情况,所以像这样动态声明它们并不重要。

【问题讨论】:

  • 假设 BasedNum 不绑定对那些 ints 的引用,你很好,因为它们会复制参数。
  • “一旦我们离开作用域,a 和 b 不会消失” - 你在说什么具体作用域?
  • @aschepler ,在查找默认参数后,您是正确的,看起来 2 个整数是在赋值运算符之后按值传递的,正如 Mike 所说,这是一种省略默认构造函数的糖衣方式。我想知道我们这样做是否会为内存的小幅下降而牺牲时间。

标签: c++ constructor derived-class


【解决方案1】:

这些在 C++ 中被称为“默认参数”。 (在 C# 中也是如此。)

既然您知道它们的名称,您就可以用 Google 搜索它们了。

简而言之,它们允许调用者省略为它们提供值,如果调用者不提供值,则将使用给定的值。

它们只是语法糖,这意味着编码为Derived();的构造函数将被编译为Derived( 0, 0 );

【讨论】:

  • 谢谢你,麦克帮了大忙!
猜你喜欢
  • 2015-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-05
  • 2018-04-08
  • 1970-01-01
  • 2016-02-08
  • 2012-06-30
相关资源
最近更新 更多