Klasse, frage zu Referenzparametern



  • Hallo,

    ich hab eine Klasse und mit einer Funktion:

    class vektor{
    public:
    vektor(float a=0, float b=0, float c=0);
    vektor skalarproduckt(const vektor& n);
    };
    

    Warum funktioniert sowas?

    vektor x;
    
    x = x.skalarproduckt(20.7);
    

    Merci dir!



  • skalarproduckt erwartet einen vektor. Wenn du nun einen anderen Typ übergibst, in diesem Fall double, sucht der Compiler nach einer impliziten Typkonvertierung nach vektor. Die hast du (fast) mit deinem Konstruktor, denn du kannst den Konstruktor von vektor mit einem float aufrufen. Da zumindest der VC double intern mit einer Warnung in float konvertiert, sieht der Aufruf so aus:

    x = x.skalarproduckt(vektor(20.7d));
    

    Daraus macht der Compiler folgendes:

    x = x.skalarproduckt(vektor(20.7f, 0.0f, 0.0f));
    


  • Willst du verhindern, dass so etwas möglich ist mach es so:

    class vektor
    {
    public:
      explicit vektor(float a=0, float b=0, float c=0);
      vektor skalarproduckt(const vektor& n);
    };
    

    Dadurch geht nur noch so etwas:

    x = x.skalarproduckt(vektor(20.7f));
    

    Gruß
    Don06



  • Wenn Du schon "skalarproduckt" mit "ck" schreibst, sollte die Klasse wenigstens auch "vecktor" heißen …


Anmelden zum Antworten