2010-08-03 15 views
11

Ho una dichiarazione del costruttore come:Come si specificano i valori degli argomenti predefiniti per un costruttore C++?

MyConstuctor(int inDenominator, int inNumerator); 

e la definizione come

MyConstuctor::MyConstuctor(int inDenominator, 
    int inNumerator, int inWholeNumber = 0) 
{ 
    mNum = inNumerator; 
    mDen = inDenominator; 
    mWhole = inWholeNumber; 
} 

ma voglio avere la possibilità di passare numero intero come terzo parametro a seconda dell'oggetto chiamante. È questa la via giusta. se non quello che può essere il modo alternativo.

risposta

34

Quello che vi serve è:

//declaration: 
MyConstuctor(int inDenominator, int inNumerator, int inWholeNumber = 0); 

//definition: 
MyConstuctor::MyConstuctor(int inDenominator,int inNumerator,int inWholeNumber) 
{ 
    mNum = inNumerator; 
    mDen = inDenominator; 
    mWhole = inWholeNumber; 
} 

In questo modo si sarà in grado di fornire un valore non predefinito per inWholeNumber; e sarai in grado di non fornirlo in modo che 0 venga utilizzato come predefinito.


Come ulteriore suggerimento, meglio utilizzare initialization list nella definizione:

//definition: 
MyConstuctor::MyConstuctor(int inDenominator,int inNumerator,int inWholeNumber) : 
    mNum(inNumerator), mDen(inDenominator), mWhole (inWholeNumber) 
{ 
} 
+0

grazie per questo suggerimenti. – boom

4

No, è necessario fornire il valore predefinito solo nella dichiarazione del metodo. La definizione del metodo dovrebbe avere tutti e 3 i parametri senza il valore predefinito. Se l'utente della classe sceglie di passare il terzo parametro, verrà utilizzato, altrimenti verrà utilizzato il valore predefinito specificato nella dichiarazione.

1

è necessario aggiungere il parametro di default per la dichiarazione come bene e il valore di default per l'attuazione non è necessario.

+1

AFAIK, si può dare il default in entrambi i luoghi, ma non più di una volta per ogni argomento (sia nella dichiarazione e definizione). A scopo di documentazione, si raccomanda di dare tutti i valori predefiniti nella definizione della classe (gli utenti della classe non dovrebbero avere bisogno di cercare l'implementazione della classe per vedere come viene usata). – UncleBens

Problemi correlati