2010-08-03 13 views
11

que tienen una declaración del constructor como:¿Cómo especifico los valores de argumento por defecto para un constructor de C++?

MyConstuctor(int inDenominator, int inNumerator); 

y definición,

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

pero quiero tener una opción de pasar número entero como tercer parámetro en función de objeto que contiene. Es este el camino correcto. si no, ¿cuál puede ser el camino alternativo?

Respuesta

34

Lo que necesita es:

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

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

De esta manera usted será capaz de proporcionar un valor no predeterminado para inWholeNumber; y podrá no proporcionarlo, por lo que 0 se usará como valor predeterminado.


Como una propina adicional, utilizar mejor initialization list en la definición:

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

gracias por estos consejos. – boom

4

No, solo debe proporcionar el valor predeterminado en la declaración del método. La definición del método debe tener los 3 parámetros sin el valor predeterminado. Si el usuario de la clase elige pasar el tercer parámetro, se usará, de lo contrario se usará el valor predeterminado especificado en la declaración.

1

debe agregar el parámetro por defecto para la declaración como bien y el valor por defecto de la aplicación no es necesario.

+1

AFAIK, puede asignar el valor predeterminado en cualquier lugar, pero no más de una vez por argumento (tanto en declaración como en definición). Para fines de documentación, se recomienda dar todos los valores predeterminados en la definición de la clase (los usuarios de la clase no deberían necesitar buscar la implementación de la clase para ver cómo se usa). – UncleBens

Cuestiones relacionadas