Ich muss einen Konstruktor mit zwei Standardparametern schreiben.
%Vor% Ich habe das Szenario angegeben, in dem der Konstruktor aufgerufen wird und ein Wert für arg1
und arg2
angegeben wird und arg3
wird voraussichtlich einen Standardwert verwenden. Dann wird ein anderes Objekt instanziiert und ein Wert wird an arg1
und arg3
vergeben, und es wird erwartet, dass der Standardwert für arg2
verwendet wird.
Jetzt ist das Problem, Sie können "Standardparameter nicht überspringen" ist, was ich vom Text und online lese. Es wird gesagt, die Standardparameter von ihrer Überladenheit zu ordnen, aber das Szenario hat einen Standardparameter, während der andere nicht verwendet wird. Die Hinweise für diese Frage sagen mir, dass ich die Parameter / Argumente neu anordnen soll. Es scheint jedoch, dass keine der von mir durchgeführten Nachbestellungen in der Lage ist, dieses Problem zu lösen.
Außerdem können überladene Konstruktoren nicht verwendet werden. Dies muss von einem Konstruktor durchgeführt werden.
Wie würde man das machen? Ich bin ratlos und werde ein bisschen verrückt darüber :(
Außerdem können überladene Konstruktoren nicht verwendet werden. Dies muss von einem Konstruktor durchgeführt werden.
Der einzige Grund, warum ich mir diese Anforderung vorstellen kann, ist, dass die optionalen Argumente denselben Typ haben. In diesem Fall stecken Sie fest und Sie möchten in den benannten Konstruktor und / schauen. oder benannte Parameter Idiome.
Ansonsten definieren Sie einfach den zusätzlichen Konstruktor. Dies kann zu einer gewissen Duplizierung führen. die Standardwerte.
%Vor%Besondere Einschränkung, dass es nur einen Konstruktor geben muss. Hier ist das nächste, was mir einfällt:
%Vor% Beachten Sie, dass bei GCC Warnungen generiert werden, da die Konvertierung von einem String-Literal in nicht-const char*
veraltet und unklug ist. Aber es ist, was Sie gefragt haben, und es so zu beheben, dass die Parameter char*
und Datenelement const char*
einfach genug sind.
Eine wesentliche Schwäche ist, dass Sie damit nicht aufhören, Foo(1,2,3)
zu schreiben. Um zu überprüfen, dass zur Kompilierzeit denke ich, dass Sie mehrere Konstruktoren benötigen. Um es zur Laufzeit zu überprüfen, könnten Sie den dritten Parameter in eine andere Klasse stellen, DefaultOrInt
, wobei Default
ein Typ ist, der nur für diesen Zweck verwendet wird und nur einen Wert unterstützt, der als Standardwert von arg3
verwendet wird. Dann, wenn arg2.isInt()
wahr ist, überprüfen Sie arg3.isInt()
ist falsch und wenn nicht logic_error
werfen.
Im Moment können Sie std :: bind verwenden, um diese Art von Operation oder in c ++ 14/17 Sie können die Lambda-Funktion verwenden und das gleiche erreichen.
Tags und Links c++ parameters default