2015-12-21 113 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身体。