关于班级定义的问题

时间:2011-03-08 14:06:42

标签: c++ class constructor

我看到声称以下两个类定义是等效的。真的吗?怎么样?感谢。

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) { }
};

5 个答案:

答案 0 :(得分:3)

第一个单独列出所有可能性(无参数,一个参数,两个参数)(overloading),第二个因为使用default parameters而只需要一个函数,这正是相同但短得多。

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

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