【问题标题】:question on class definitions关于类定义的问题
【发布时间】:2011-03-08 14:06:41
【问题描述】:

我看到以下两个类定义声称是等价的。真的吗?如何?谢谢。

class  complex{
double re, im;
public:
  complex( ): re(0) , im(0) { }
  complex (double  r): re(r), im(0)  { }
  complex (double  r, double i): re(r),   im(i) { }
};
class  complex{
  double re, im;
  public:
    complex (double  r=0, double i=0): re(r),   im(i) { }
};

【问题讨论】:

    标签: c++ class constructor


    【解决方案1】:

    第一个单独列出所有可能性(无参数,一个参数,两个参数)(overloading),第二个因为使用default parameters,所以只需要一个函数,它完全一样,但要短得多.

    如果变量的初始化不仅仅是为它们分配一个值,或者您希望根据参数计数拥有完全不同的构造函数,第一个仍然有用。

    【讨论】:

      【解决方案2】:

      严格来说,它们并不等价(毕竟,第二个只有一个构造函数,而第一个有三个),但它们的行为是相同的。具有为所有参数提供默认值的非零参数的构造函数有资格作为默认构造函数。

      【讨论】:

        【解决方案3】:

        是的。它们是等价的。但我认为第二个更好,因为它很紧凑,利用了一个名为 default argument 的 C++ 特性。

        【讨论】:

          【解决方案4】:
          class  complex{
            double re, im;
            public:
              complex (double  r=0, double i=0): re(r),   im(i) { }
          };
          

          是实现第一个版本的一种简化方式。基本涵盖了第一个三个构造函数的所有情况。

          【讨论】:

            【解决方案5】:

            后一个示例中的默认值 (r=0) 允许部分或全部省略参数。 因此,一个构造函数方法包含上面示例中的所有三个变体。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2022-12-01
              • 1970-01-01
              • 2011-06-25
              • 1970-01-01
              • 2011-05-26
              • 2011-04-02
              相关资源
              最近更新 更多