unsigned int operator und int operator das gleiche ?



  • THE-E schrieb:

    Hier im Buch geht es aber um Konvertierungskonstruktoren. Ich zitiere vom Buch:

    C++ von A bis Z schrieb:

    Hinter dem Begriff Konvertierungskonstruktor verbirgt sich nichts anders als ein Konstruktor mit Parametern. Somit ist also jeder Konstruktor, den Sie bisher mit Parametern verwendet haben, ein Konvertierungskonstruktor - mit Ausnahme des Kopierkonstruktors.

    Oder bringe ich da was durcheinander ?

    Deine Frage bezog sich aber nicht auf einen Konvertierungskonstruktor, sondern auf einen Konvertierungsoperator, nämlich den operator unsigned int() . Konvertierungskonstruktoren sind übrigens nur Konstruktoren, die genau einen Parameter nehmen. Dein const char*- Konstruktor ist also einer. Allerdings gings ja nicht um den.

    Wie nennt man denn den Vorgang der das implizit macht ?

    Implizite Konvertierung 😉



  • THE-E schrieb:

    Hier im Buch geht es aber um Konvertierungskonstruktoren. Ich zitiere vom Buch:

    C++ von A bis Z schrieb:

    Hinter dem Begriff Konvertierungskonstruktor verbirgt sich nichts anders als ein Konstruktor mit Parametern. Somit ist also jeder Konstruktor, den Sie bisher mit Parametern verwendet haben, ein Konvertierungskonstruktor - mit Ausnahme des Kopierkonstruktors.

    Und schon wieder ein Fall, wo das A-Z-Buch negativ auffällt.



  • volkard schrieb:

    THE-E schrieb:

    Hier im Buch geht es aber um Konvertierungskonstruktoren. Ich zitiere vom Buch:

    C++ von A bis Z schrieb:

    Hinter dem Begriff Konvertierungskonstruktor verbirgt sich nichts anders als ein Konstruktor mit Parametern. Somit ist also jeder Konstruktor, den Sie bisher mit Parametern verwendet haben, ein Konvertierungskonstruktor - mit Ausnahme des Kopierkonstruktors.

    Und schon wieder ein Fall, wo das A-Z-Buch negativ auffällt.

    Wieso genau ?

    Ich glaub das war eher mein Fehler. Im Beispiel oben also Thread-Topic ging es um Konvertierungsfunktion, nicht um Konvertierungskonstrukturen. Ich habe das uebersehen, daher auch bei mir die Verwirrung.
    Also ICH habe den Themenwechsel uebersehen und faelschlicherweise gedacht es ginge um Konvertierungskonstrukturen.



  • THE-E schrieb:

    Wieso genau ?

    Weil das klingt, als seien
    "Konvertierungskonstruktor"
    und
    "Konstruktor mit Parametern"
    das selbe.



  • volkard schrieb:

    THE-E schrieb:

    Wieso genau ?

    Weil das klingt, als seien
    "Konvertierungskonstruktor"
    und
    "Konstruktor mit Parametern"
    das selbe.

    Ah ok verstehe, aber ist dies dann nicht der Fall ? 😕



  • Ich würde nur die Konstruktoren Konvertierungskonstruktoren nennen, die genau einen Parameter haben, aber nicht mehr als einen (, wie pumuckl vorhin auch geschrieben hat).



  • Zudem würde ich explicit -Konstruktoren von Konvertierungskonstruktoren ausschliessen. Der folgende ist für mich kein Aufruf eines Konvertierungskonstruktors:

    std::vector<int> vec(7);
    

    Und falls ein Konstruktor nicht explicit ist und mehrere Parameter hat, von denen der zweite bis letzte Defaultwerte besitzen, kann man auch von Konvertierungskonstruktor sprechen. Nur gibts das relativ selten...

    class MyClass
    {
        public:
            MyClass(int i, double d = 5.0);
    };
    
    MyClass obj = 3;
    


  • Nexus schrieb:

    Zudem würde ich explicit -Konstruktoren von Konvertierungskonstruktoren ausschliessen. Der folgende ist für mich kein Aufruf eines Konvertierungskonstruktors:

    std::vector<int> vec(7);
    

    Ja, damits eine Typumwandlung wird, muß man es deutlicher hinschreiben.

    std::vector<int> vec=static_cast<std::vector<int> >(7);
    

    😃



  • volkard schrieb:

    Ich würde nur die Konstruktoren Konvertierungskonstruktoren nennen, die genau einen Parameter haben, aber nicht mehr als einen (, wie pumuckl vorhin auch geschrieben hat).

    Und nicht explicit sind?



  • THE-E schrieb:

    ich bin gerade auf folgenden Code im Buch gestossen:

    ... grauenhafter Code ...
    

    😮

    THE-E schrieb:

    Also das Buch heisst "C++ von A bis Z(2.Auflage) - Galileo Computing"

    Aha. Das Buch scheint nicht viel zu taugen -- es sei denn, die "Macken" sind absichtlich dort, zu Lehrzwecken / als Negativbeispiel.

    Kopierkonstruktor und Zuweisungsoperator fehlen. Das führt unweigerlich zu Speicherlecks und/oder Destruktoren, die denselben Speicherblock mehr als einmal freigeben wollen.

    Der Konvertierungsoperator ist ziemlich Banane. Konvertierungen sollten den Sinn des Werts erhalten, der von einem Typ zum anderen konvertiert wird. Zeichenketten haben nicht viel mit Ganzzahlen zu tun. Ja, die Länge einer Zeichenkette ist eine Ganzzahle. Dafür kann man ja auch eine size oder length Methode anbieten. Aber als Konvertierungsoperator ist das unpassend.

    Const-Correctness wird verletzt. Die folgende Funktion kann einen "konstanten" String verändern, wobei sie es eigentlich nicht dürfen sollte:

    void const_incorrect(String const& s)
    {
      int l = s; // mit-den-Augen-roll
      char* p = s.get_String(); // legal, da get_String const ist
      if (l>0) {
        p[0] = 'X'; // Oops! Ich habe einen "konstanten" String geändert.
      }
    }
    

    kk


Anmelden zum Antworten