2009-09-17 14 views

Respuesta

53

.h:

class Foo { 
    int x, y; 
    Foo(int a, int b=0); 
}; 

.cc:

#include "foo.h" 

Foo::Foo(int a,int b) 
    : x(a), y(b) { } 

Sólo se agrega por defecto a la declaración, no aplicación.

parámetro
+0

Gracias, agradezco la respuesta rápida! – royvandewater

8

El archivo de cabecera debe tener los parámetros por defecto, el CPP no debería.

test.h:

class Test 
{ 
public: 
    Test(int a, int b = 0); 
    int m_a, m_b; 
} 

test.cpp:

Test::Test(int a, int b) 
    : m_a(a), m_b(b) 
{ 

} 

main.cpp:

#include "test.h" 

int main(int argc, char**argv) 
{ 
    Test t1(3, 0); 
    Test t2(3); 
    //....t1 and t2 are the same.... 

    return 0; 
} 
5

Es necesario poner el argumento por defecto s en el encabezado, no en el archivo .cpp.

8

El valor predeterminado debe ser escrito en el archivo de cabecera.

Foo(int a, int b = 0); 

En la cpp, al definir el método no puede especificar el parámetro predeterminado. Sin embargo, conservo el valor predeterminado en el código comentado para que sea fácil de recordar.

Foo::Foo(int a, int b /* = 0 */) 
+2

y cambiarlo en dos lugares si es necesario? ;-) –

+1

99% de las veces, no va a cambiar. Así que estamos hablando de un caso de uso poco frecuente :-) – Naveen

+1

En mi opinión es una lástima que el estándar de C++ no requieren * * Que sea en ambos lugares y comprobar que es lo mismo. Los valores predeterminados para los parámetros son una parte tan importante de la interfaz como los tipos de parámetros. El compilador debería verificarlo. –

Cuestiones relacionadas