Tengo un archivo CPP como esto:Constructores con parámetros por defecto en archivos de cabecera
#include Foo.h;
Foo::Foo(int a, int b=0)
{
this->x = a;
this->y = b;
}
¿Cómo refiero a esto en foo.h?
Tengo un archivo CPP como esto:Constructores con parámetros por defecto en archivos de cabecera
#include Foo.h;
Foo::Foo(int a, int b=0)
{
this->x = a;
this->y = b;
}
¿Cómo refiero a esto en foo.h?
.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ámetroEl 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;
}
Es necesario poner el argumento por defecto s en el encabezado, no en el archivo .cpp.
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 */)
y cambiarlo en dos lugares si es necesario? ;-) –
99% de las veces, no va a cambiar. Así que estamos hablando de un caso de uso poco frecuente :-) – Naveen
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. –
Gracias, agradezco la respuesta rápida! – royvandewater