Mam plik cpp takiego:Konstruktorzy z domyślnymi parametrami w nagłówku plików
#include Foo.h;
Foo::Foo(int a, int b=0)
{
this->x = a;
this->y = b;
}
jaki sposób odnoszą się do tego w Foo.h?
Mam plik cpp takiego:Konstruktorzy z domyślnymi parametrami w nagłówku plików
#include Foo.h;
Foo::Foo(int a, int b=0)
{
this->x = a;
this->y = b;
}
jaki sposób odnoszą się do tego w 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) { }
Wystarczy tylko dodać domyślne deklaracji, a nie implementacji.
Plik nagłówkowy powinien mieć domyślne parametry, a cpp nie.
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;
}
Musisz umieścić domyślny argumentu s w nagłówku, a nie w pliku .cpp.
Domyślny parametr należy zapisać w pliku nagłówkowym.
Foo(int a, int b = 0);
Na stronie cpp podczas definiowania metody nie można podać domyślnego parametru. Jednak zachowuję domyślną wartość w skomentowanym kodzie, ponieważ jest łatwa do zapamiętania.
Foo::Foo(int a, int b /* = 0 */)
i zmienić go w dwóch miejscach, w razie potrzeby? ;-) –
99% razy, to się nie zmieni. Więc mówisz o rzadkim przypadku użycia :-) – Naveen
Moim zdaniem jest to źle, standard C++ nie * wymaga *, aby był w obu miejscach i sprawdzić, czy jest taki sam. Wartości domyślne dla parametrów są w takim samym stopniu częścią interfejsu jak typy parametrów. Kompilator powinien to sprawdzić. –
Dzięki, doceń szybką odpowiedź! – royvandewater