2015-12-21 3 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

Side Примечание

Если вы хотите использовать C++ 11 Делегирование конструкторов вы должны написать:

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

вместо

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

который создает временный неиспользованными Complex внутри конструкции ctor body.

Смежные вопросы