ich eine CPP-Datei wie folgt aussehen:Konstrukteurs mit Standardparametern in Header-Dateien
#include Foo.h;
Foo::Foo(int a, int b=0)
{
this->x = a;
this->y = b;
}
Wie kann ich auf diese verweisen in foo.h?
ich eine CPP-Datei wie folgt aussehen:Konstrukteurs mit Standardparametern in Header-Dateien
#include Foo.h;
Foo::Foo(int a, int b=0)
{
this->x = a;
this->y = b;
}
Wie kann ich auf diese verweisen in 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) { }
Sie nur standardmäßig Erklärung hinzufügen, nicht Implementierung.
Die Header-Datei sollte die Standardparameter haben, die cpp sollte nicht.
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;
}
Sie müssen das Standardargument setzen s in der Kopfzeile, nicht in der CPP-Datei.
Der Standardparameter muss in die Header-Datei geschrieben werden.
Foo(int a, int b = 0);
In der cpp können Sie beim Definieren der Methode den Standardparameter nicht angeben. Allerdings behalte ich den voreingestellten Wert im kommentierten Code, so dass es leicht zu merken ist.
Foo::Foo(int a, int b /* = 0 */)
und ändern Sie es bei Bedarf an zwei Stellen? ;-) –
99% der Zeiten, es wird sich nicht ändern. Du sprichst also von einem seltenen Anwendungsfall :-) – Naveen
Meiner Meinung nach ist es zu schade, dass der C++ - Standard * nicht verlangt, dass es an beiden Orten ist und dass es das gleiche ist. Voreinstellungen für Parameter gehören genauso zur Parameter-Art wie die Parametertypen. Der Compiler sollte es überprüfen. –
Danke, schätzen die schnelle Antwort! – royvandewater