Warum muessen Default Parameter in C++ Konstanten sein?
-
Warum keine Variablen?
-
Weil es dann keine Default-Parameter mehr sind.
-
Stimmt doch gar nicht. Gesetzt den Fall, du beziehst dich auf C++, was leider nicht klar zu erkennen ist.
-
Raptor schrieb:
Warum keine Variablen?
ich vermut mal, dass die zu Compilezeit gebunden werden, sprich: beim Kompilieren muss der Kompiler bereits wissen, was da jetzt reinkommt.
-
Ich beziehe mich auf C++
-
Hi,
wieso sollte das denn nicht gehen?
#include <iostream> using namespace std; int var2 = 20; int blah(int var=var2) { return var; }; int main() { cout << blah(2) << endl; cout << blah() << endl; }
-
Dieser Thread wurde von Moderator/in kingruedi aus dem Forum Rund um die Programmierung in das Forum C++ verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Ich hatte sowas versucht:
#include <iostream> using namespace std; class A { public: int m_func(int=var_); protected: int var_; }; int A::m_func(int var) { return var; } int main() { A a; cout << a.m_func(42) << endl; cout << a.m_func() << endl; }
Und des klappt eben nicht...
-
Hallo,
äh, und dich wundert es jetzt, dass das nicht funktioniert? Denk nochmal bitte genau darüber nach.....
-
Raptor schrieb:
Ich hatte sowas versucht:
#include <iostream> using namespace std; class A { public: int m_func(int=var_); // was soll das denn sein? protected: int var_; //ich verstehe aber nicht, warum du eine klasse benutzt, oder du diese variable brauchst.... }; int A::m_func(int var = 2) { return var; } int main() { A a; cout << a.m_func(42) << endl; cout << a.m_func() << endl; }
Und des klappt eben nicht...
-
public:
int m_func(int=var_); // was soll das denn sein? das ist ein default parameter.@carstenj: Liegt es daran, dass var_ nicht static ist?
-
Raptor schrieb:
public:
int m_func(int=var_); // was soll das denn sein? das ist ein default parameter.das ist aber ganz bestimmt kein default parameter....
#include <iostream> using namespace std; class A { public: int m_func(int var2); //die funktion in der klasse protected: int var2; }; //die implementation... int A::m_func(int var = 2) //DAS ist ein default parameter! { return var; } int main() { A a; cout << a.m_func(42) << endl; //42 cout << a.m_func() << endl; //2 cin.get(); return 0; }
schon mal an sowas gedacht?
-
Wie erklärst Du Dir das funktionierende Beispiel von CarstenJ?
-
Mein lieber leech click
leech schrieb:
Raptor schrieb:
public:
int m_func(int=var_); // was soll das denn sein? das ist ein default parameter.das ist aber ganz bestimmt kein default parameter....
Doch, das ist ein Default Parameter. Ueberzeuge dich, wenn du willst
z.B: http://tutorial.schornboeck.net/default_parameter.htmBeides ist richtig.
-
edit
-
CarstenJ schrieb:
äh, und dich wundert es jetzt, dass das nicht funktioniert? Denk nochmal bitte genau darüber nach.....
Zu welchem Schluss kommst DU? Es gibt eigentlich keinen technischen Grund, dass das nicht geht. Es ist reine Willkür, beugt Fehlern vor oder hat sonstigen erzieherischen Zweck.
-
Bashar schrieb:
CarstenJ schrieb:
äh, und dich wundert es jetzt, dass das nicht funktioniert? Denk nochmal bitte genau darüber nach.....
Zu welchem Schluss kommst DU? Es gibt eigentlich keinen technischen Grund, dass das nicht geht. Es ist reine Willkür, beugt Fehlern vor oder hat sonstigen erzieherischen Zweck.
Mir ging es dabei auch um den Sinn. Wenn ich erst eine Funktion mit Parameter aufrufen muss, damit ich sie beim nächsten Mal ohne Parameter aufrufen kann, erschließt sich mir der Sinn nicht. Defaultparameter sind doch u. a. dafür da, dass der Aufrufer keinen fehlerhaften Aufruf der Funktion durchführen kann?!
@carstenj: Liegt es daran, dass var_ nicht static ist?
Ja, wenn die Variable static const wäre, würde es funktionieren. Also so gesehen wer die Ausgangsfrage falsch gestellt.
-
Defaultparams sind dafür da, wenn ich z.B. nicht weiß was ich genau übergeben soll. Oder wenn ich mir Arbeit ersparen will, weil der Deafultparam irgendwie schon passt. Ist ja bei GUIs ganz super. Sagen wir mal, ich will ein Fenster konstruieren. Warum soll ich mir da unbedingt Werte für die Position und Größe überlegen? Notfalls kann ich aber trotzdem was anderes übergeben.
Auch spart das redundante Funktionen und Methoden ein. Anstatt das ich 3 gleichnamige Funktionen mit drei verschiedenen Paramteranzahl schreibe, schreib ich nur eine. Viel übersichtlicher:
void foo(int p1); void foo(int p1, int p2); void foo(int p1, int p2, int p3);
Kann viel einfacher für den Benutzer sein:
void foo(int p1=0 , int p2=0, int p3=0);
-
@Artchi: netter Beitrag. Was hat er mit dem Thema zu tun?
-
CarstenJ schrieb:
Mir ging es dabei auch um den Sinn. Wenn ich erst eine Funktion mit Parameter aufrufen muss, damit ich sie beim nächsten Mal ohne Parameter aufrufen kann, erschließt sich mir der Sinn nicht. Defaultparameter sind doch u. a. dafür da, dass der Aufrufer keinen fehlerhaften Aufruf der Funktion durchführen kann?!
Hmm? Kannst du das noch mal kurz erläutern?
-
Raptor schrieb:
Mein lieber leech click
leech schrieb:
Raptor schrieb:
public:
int m_func(int=var_); // was soll das denn sein? das ist ein default parameter.das ist aber ganz bestimmt kein default parameter....
Doch, das ist ein Default Parameter. Ueberzeuge dich, wenn du willst
z.B: http://tutorial.schornboeck.net/default_parameter.htmBeides ist richtig.
okay sorry.. kannte diese schreibweise ( int = var ) nicht... von daher bin ich von einem anderen problem ausgegangen ( ich dachte, dass es an dieser schreibweise lag... )
wieder gut?