2011-03-08 68 views
1

我看到聲稱以下兩個類定義是等價的。真的嗎?怎麼樣?謝謝。關於類定義的問題

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

回答

3

第一個單獨列出所有可能性(無參數,一個參數,兩個參數)(overloading),第二個只需要一個功能,因爲使用default parameters,這是完全相同的,但更短。

如果初始化變量不僅僅是給它們賦值,還是希望根據參數數量有完全不同的構造函數,第一個仍然有用。

0

是的。它們是相同的。但第二個在我看來更好,因爲它很緊湊,利用了一個名爲default argument的C++特性。

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

是實現第一個版本的簡化方法。它基本涵蓋了第一個三個構造函數的所有情況。

0

後一示例中的默認值(r = 0)允許部分或完全省略參數。 因此,一個構造函數方法包含頂部示例的全部三個變體。

1

嚴格地說,它們不是等價的(畢竟,第二個只有一個構造函數,而第一個構造函數有三個構造函數),但它們的行爲是平等的。具有非零參數的構造函數爲所有這些參數提供默認值,這些構造函數可以用作默認構造函數。