2015-12-21 66 views
-4

問題是關於混淆我的多個構造函數。C++中的多個構造函數

#include "complex.h" 
#include <iostream> 

using namespace std; 

Complex::Complex(double realPart, double imPart) 
    : m_R(realPart), m_I(imPart) 
{ 
    cout << "complex(" << m_R << "," << m_I << ")" << endl; 
} 

Complex::Complex(double realPart) 
{ 
    Complex(realPart, 0); 
} 

Complex::Complex() : m_R(0.0), m_I(0.0) 
{ 
} 

int main() { 
    Complex C1; 
    Complex C2(3.14); 
    Complex C3(6.2, 10.23); 
} 

有人可以解釋如何編譯器知道使用三個定義的構造函數嗎?引物來自this book,第58頁。

+2

與參數匹配 – NathanOliver

+0

查看參數個數並根據參數類型進行更好的匹配。 – Jarod42

+0

這也可以稱爲構造函數重載。 – maniacalrobot

回答

1

它取決於提供給構造函數的參數的數量和類型。因此

std::Complex first(1, 2.0); // Use first constructor 
std::Complex second(5.0); // Use second constructor 
std::Complex third;   // Use third constructor with no arguments. 
3

旁註

如果你想利用C++ 11個委派構造函數,你應該寫:

Complex::Complex(double realPart) 
: Complex(realPart, 0) 
{} 

,而不是

Complex::Complex(double realPart) { 
    Complex(realPart, 0); 
    } 

它會創建一個臨時閒置Complex裏面的解釋ctor身體。

相關問題