我看到声称以下两个类定义是等效的。真的吗?怎么样?感谢。
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) { }
};
答案 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)允许部分或完全省略参数。 因此,一个构造函数方法包含顶部示例中的所有三个变体。