Klasse String??



  • Hallo zusammen ich hab aus einem Buch folgende Zeilen entnommen:
    (ein bisschen abgeändert....)

    #include<string.h>
    #include<stdio.h>
    
    class Zeichen
    {
    	char *text;
    	int laenge;
    
    public:
    
    	Zeichen(char *s)
    	{
    		laenge = strlen(s)+1;
    		text = new char[laenge];
    		strcpy(text,s);
    	}
    
    	//passt den Speicher des Objekt s automatisch an den neuen
    	//String an.
    	void assign(const Zeichen& s)
    	{
    		delete text;
    		text = new char[s.laenge];
    		strcpy(text,s.text);
    		laenge= s.laenge;
    	}
    	void gib_aus()
    	{
    		printf("%s\n", text);
    	}
    };
    
    void main()
    {
    	Zeichen obj("Hallo");
    	obj.gib_aus();
    }
    

    Hier gibt es eine Methode "assign", die soll wie im kommentar oben schon genannt den Speicher des Objects anpassen.
    Meine Frage nun wenn ich zuvor eben "Hallo" übergeben habe und dieses nun
    in "Hallo du da" umändern möchte wie lautet da der Aufruf????

    obj.assign(obj("Hallo du da")); oder so????????????????



  • jedes new[] verlangt ein delete[]
    du hast also einen fehler drin.

    der aufruf von assign() ist easy:

    Zeichen obj("nix");
    obj.assign("was anderes");
    obj.gib_aus();

    btw: man sollte C und C++ nicht mischen - also hau das printf



  • Es heißt <string> und <cstdio> und nicht <string.h> und <stdio.h>. 🙄



  • Eher <cstring>.
    Und was für ein Buch ist das denn bitte?



  • operator void schrieb:

    Eher <cstring>.

    <string> liefert auch strlen u.ä. (ok, wahrscheinlich inkludiert es <cstring>).



  • Ich hätt da mal noch ne Frage und zwar wieso kann man hier an die Methode
    assign einen String übergeben wenn die Methode einen Parameter vom Typ
    Zeichen verlangt???

    ich hab noch ein bissen rumprobiert und habs dann auf diese Weiße geschafft:
    z.B:
    Zeichen obj("Hallo");
    Zeichen obj2("Hallo du da");
    obj.assign(obj2);

    Wo ist jetzt hier der Unterschied???



  • char* kann in ein Object der Klasse Zeichen umgewandelt werden.
    Zeichen hat nämlich einen Konstruktor, der char* entgegennimmt.

    Und diese Umwandlung macht der Compiler lautlos. 🙂



  • Ist das nur bei Strings so oder gibt da noch mehr solche fälle??
    Oder ist das allgemein so wenn man einen Parameter der eigenen Klasse erwartet??



  • dieses assign kenn ich doch aus ner frühen auflage vom breymann! es kacket bei x.assign(x) ab, wenn ich mich recht erinnere.



  • Wie meinst das jetzt??
    ich hab das beispiel aus dem c/c++ Kompendium von Dirk Louis, wenn du darauf hinaus willst....



  • Guanin schrieb:

    Ist das nur bei Strings so oder gibt da noch mehr solche fälle??
    Oder ist das allgemein so wenn man einen Parameter der eigenen Klasse erwartet??

    es gibt eine umwandlung.

    da Zeichen ja einen ctor hat, der einen char* erwartet, kannst du mit hilfes dieses Ctor einen char* in ein Zeichen umwandeln. und genaus das geschieht.

    z.assign("Hallo");
    ist somit das gleiche wie
    z.assign(Zeichen("Hallo"));
    da "Hallo" in ein Zeichen automatisch umgewandelt werden kann.



  • Ok wenn das so ist bin ich ja beruigt aber was soll ein ctor sein??



  • Guanin @shade schrieb:

    Ok wenn das so ist bin ich ja beruigt aber was soll ein ctor sein??

    ctor ist die abkürzung für Constructor, was auf deutsch ja Konstruktor heisst



  • Und falls du nicht willst, das solche Konvertierungen impliziet von statten gehen musst du dem Konstruktor das Attribut explicit geben.


Anmelden zum Antworten