übergabe parameter...



  • hi zusammen!
    angenommen ich will einen konstruktor schreiben der als parameter 3 werte bekommen kann, aber wenn keine parameter übergeben werden, sollen standard parameter genommen werden... wie mache ich soetwas?

    class Vektor {
    private:
    float a[3];
    public:
    Vektor(float a1=0, float a2=0, float a3=0);
    // weitere Funktionsmember
    };
    


  • Schreib einfach deinen Konstruktor mit deinen 3 Parametern. Und dann schreibst du nochmal deinen Standardkonstruktor ohne Parameter.

    Je nachdem, ob du Argumente beim Aufruf übergibst, wird dann entweder der Konstruktor mit 0 Parametern oder der mit 3 Parametern aufgerufen.
    Oder willst du, dass man von den 3 Parametern z.B. nur 2 Angeben muss? Sowas geht in C++ glaub ich nicht.



  • und wie sähe es aus wen ich ein solches objekt erstelle, zB im main...
    muss es

    vektor 	a(0, 0, 0);
    

    heißen, oder wie schreibe ich es wenn ich keine parameter übergeben will?!

    danke für jede hilfe!!!



  • habe den konstruktor mal über laden... der kommt sich dann aber wieder mit anderen sachen in die quere...
    --> call of overloaded 'vektor()' is ambiguous...
    und zwar bei jeder klasse, wo ich einen operator überlade... 😞

    vektor &operator=(const vektor &neu);
    vektor operator-(const vektor &neu);
    vektor operator+(const vektor &neu);
    


  • Was die Operatoren damit zu tun haben, weiß ich zwar nicht, aber: Wenn du den Konstruktor überlädst, musst du natürlich beim alten die Defaultparameter rausnehmen, sonst könnte ein "Vektor v" ja entweder ohne Parameter oder mit drei default-eingesetzten Werten erstellt werden. Wenn du das getan hast, sollte es eigentlich funktionieren, poste ansonsten doch mal ein Minimalbeispiel.



  • K Frey schrieb:

    und wie sähe es aus wen ich ein solches objekt erstelle, zB im main...
    muss es

    vektor 	a(0, 0, 0);
    

    heißen, oder wie schreibe ich es wenn ich keine parameter übergeben will?!

    danke für jede hilfe!!!

    vektor a();

    Wie du selber schon festgestellt hast, nennt sich diese Vorgehensweise Überladung. Die besagte Fehlermeldung kommt, wenn du einen Konstruktor (oder eine Methode) aufrufst, die du nicht definiert hast.
    z.B.

    vektor a(4,6,4,3,6,7,99,6,5,4,6);

    obwohl du nur den mit 3 Parametern und den mit 0 definiert hast.



  • Optimizer schrieb:

    vektor a();

    Und wieder einmal schlägt die hervorragende Deklarationssyntax zu: Das deklariert eine Funktion a, die einen Vektor zurückgibt. Wenn bei der Konstruktion keine Parameter übergeben werden, müssen die Klammern weg.



  • So ein Pech aber auch, das das bei mir funktioniert. Da ich nicht jede zweite Variable global hab, ist mir das auch gar nicht aufgefallen, dass das einer Funktionsdeklaration ähnelt.



  • Zeig mal ein Codeschnipsel, wo das funktionieren soll. Wenn man es global schreibt, deklariert es eine globale Funktion. Wenn man es in einer Funktion schreibt, deklariert es eine globale Funktion (was für ein nettes Überbleibsel aus C) und innerhalb einer Klasse deklariert es eine Elementfunktion.



  • Damn, du hast recht, sorry.

    Ich korrigiere, um den Standardkonstruktor aufzurufen:

    vektor a;
    

    Ich war jetzt ein bisschen auf Java, weil ich grad meine "Hausaufgaben" gemacht hab 😢


Anmelden zum Antworten