Problem mit Zeigern



  • leech schrieb:

    wenn du ganz große klassen hast, dann ist es sinnvoller mit einem zeiger auf dieser klasse zu arbeiten, als mit der klasse selbst....

    z.b.: du speicherst klassen in einem vektor... dann würde es ganz schön lange dauern, die ganzen klassen zu kopieren...

    Wie so ist es sinnvoller? (PS: Habe keine Ahnung von Vektoren)

    MfG CSS



  • CSS schrieb:

    ...so beinhaltet der Zeiger die Adresse des Objekts und ist das Objakt selbst

    Ein Zeiger "ist" nicht das Objekt selbst.

    int* i = new int; // EDIT: Hier stand versehentlich "new i"
    *i = 10; // Richtig. Mit * machst du deutlich, dass du das Objekt des Zeigers ansprechen willst
    i = 10; // Falsch. Ein Zeiger ist eben nicht das Objekt selbst.
    


  • CSS schrieb:

    leech schrieb:

    wenn du ganz große klassen hast, dann ist es sinnvoller mit einem zeiger auf dieser klasse zu arbeiten, als mit der klasse selbst....

    z.b.: du speicherst klassen in einem vektor... dann würde es ganz schön lange dauern, die ganzen klassen zu kopieren...

    Wie so ist es sinnvoller? (PS: Habe keine Ahnung von Vektoren)

    MfG CSS

    willst du mich ver*******?
    wie kann man keine ahnung von all den sachen haben? ohne die kommt man doch gar nicht vorwärts...
    oder wo speicherst du deine daten?
    ich empfehle dir dringenst die STL zu lernen!



  • leech schrieb:

    CSS schrieb:

    leech schrieb:

    wenn du ganz große klassen hast, dann ist es sinnvoller mit einem zeiger auf dieser klasse zu arbeiten, als mit der klasse selbst....

    z.b.: du speicherst klassen in einem vektor... dann würde es ganz schön lange dauern, die ganzen klassen zu kopieren...

    Wie so ist es sinnvoller? (PS: Habe keine Ahnung von Vektoren)

    MfG CSS

    willst du mich ver*******?
    wie kann man keine ahnung von all den sachen haben? ohne die kommt man doch gar nicht vorwärts...
    oder wo speicherst du deine daten?
    ich empfehle dir dringenst die STL zu lernen!

    Galubst du denn ich bin einer der sich gut mit C++ auskennt? Ich bin Anfänger! Ich lerne aus Tutorialen und in keiner Schule.

    MfG CSS



  • Zeiger braucht man immer dann, wenn man ein "optionales Objekt" abbilden will, denn ein Zeiger kann auch 0 sein. Eine Funktion mag ein bestimmtes Objekt als Parameter nutzen können, aber auch ohne dieses funktioneren. Ein Element einer verketteten Liste kann einen Nachfolger haben, muss aber nicht.

    Außerdem eignen sich (Auto-)Zeigermember, um Compilezeitabhängigkeiten im Code zu verringern.



  • leech schrieb:

    willst du mich ver*******?
    wie kann man keine ahnung von all den sachen haben? ohne die kommt man doch gar nicht vorwärts...
    oder wo speicherst du deine daten?
    ich empfehle dir dringenst die STL zu lernen!

    Ich glaube nicht, dass CSS dich ver******* will. Und ja, man kann C++ auch ohne STL programmieren. Viele professionelle Firmen werden das wahrscheinlich auch machen (oder zumindest teilweise), weil man mit der STL schnell an Grenzen stösst. Entweder sind die Klassen nicht speziell genug, zu unhandlich, fehlen vollkommen oder was weiss ich.
    Und gerade als blutiger Anfänger sollte man sich nicht gleich Hals über Kopf in die STL stürzen. Da ist es imo besser, mit so einfachen Beispielen wie von godlikebot rumzuspielen (es heisst übrigens "new int" und nicht "new i").

    CSS schrieb:

    //Konto ist eine Klasse
    Konto giro, *zeiger = &giro;
    
    zeiger=>MethodeVonGiro();
    
    //Ich könnte doch genauso gut:
    
    giro.MethodeVonGiro();
    
    //schreiben, oder etwa nicht?
    

    Ja, das ist natürlich einfacher für automatische Instanzen. Für dynamische Instanzen aber nicht möglich. Zumindest nicht ohne Dereferenzieren. Und dann sind wir wieder beim Thema Zeigerhandling.

    In C++ verwendet man rohe Zeiger jedenfalls deutlich weniger als in C. Ein Grund dafür sind ua Referenzen. Trotzdem kann man Zeiger damit nicht vollkommen ersetzen. Wie MFK schon sagte, können Zeiger zur Laufzeit geändert werden, Referenzen nicht.
    Der Hauptgrund für Zeiger ist aber nach wie vor, dass du mit Daten dynamisch by-reference arbeiten kannst, und nicht by-value aufgezwungen wird. Das spart Speicherplatz (zB bei der Übergabe von Objekten an Funktionen - auch wenn wir wissen, dass man in C++ dafür normalerweise Referenzen verwendet) und Rechenkapazität (zB eine Liste sortieren).



  • ich dachte nur, dass CSS kein anfänger ist, da er ja schon 300(!) posts hat....
    gut es geht auch ohne STL, aber ich finde sie recht praktisch, da sie einem viel arbeit abnimmt...



  • Hi groovemaster,

    STL ist Bestandteil des Standard und kann nicht einfach so "teilweise fehlen".
    Selbst MSVC6 schafft das halbwegs, von neueren Compilern > 2000 nicht zu reden.
    Wer im Rahmen seiner Anwendung an Grenzen stösst hat entweder C++ oder STL
    nicht verstanden, denn die Library ist erweiterbar und auch so gedacht. Das was sie
    macht, das macht sie ausserdem in einem Grossteil der Fälle weitaus besser
    als die meisten Amateur- und auch Profi-Programmierer.
    Der zweitgrössten Fehler den man beim Lernen von C++ machen kann, gleich nach dem
    Irrweg zuerst C und anschliessen C++ zu lernen, ist die Betrachtung von STL als
    einem exotischen Zusatz der nur für Spezialisten oder Freaks gedacht ist. Besonders
    Anfänger sollten sich möglichst früh mit den Konzepten vertraut machen.

    mfg JJ



  • @leech

    Allein wenn du die Frage liest müsstest du wissen, das ich Anfänger bin.
    Ja ich habe schon über 300 Postings "aufm Buckl", allerdings handeln meine Postings nicht immer nur von C++. Desweiteren muss ich sagen, dass ich erst seit ca. 1 Monat "richtig" C++ lerne (War früher zu faul. Wenn mir was schwer vorkam habe ich gleich aufgegeben. Ein sehr großer Fehler!!!!).

    @groovmaster
    Danke, ich glaube jetzt habe ich es verstanden. 😃

    MfG CSS



  • John Doe schrieb:

    STL ist Bestandteil des Standard und kann nicht einfach so "teilweise fehlen".

    Nein, das hast du vollkommen falsch verstanden. Ich habe nicht davon gesprochen, dass eine STL Implementation unvollständig ist, sondern dass grundsätzlich Funktionalität fehlt. Was ist mit Threads, Sockets, Dateisystem, GUI, etc.pp. All das hat STL nicht, zumindest noch nicht.



  • Sollte niemanden, auch keine Anfänger, hindern sich intensiv mit dem zu befassen
    was da ist. 🙂

    mfg JJ



  • Schon richtig, aber erst dann, wenn man die Grundlagen beherrscht. Also elementare Typen, Zeiger, Funktionen, Kontrollstrukturen, etc.pp.



  • Bezeichnet man std::string eigentlich auch als Teil der STL oder ist der einfach nur Teil der "Standardbibliothek"?



  • Also std::string gehört schon zur STL. Ich bin mir nur nicht sicher, ob man in C++ überhaupt von der Standardbibliothek spricht. Denn neben der STL "referenziert" C++ ja auch noch etliche Sachen aus der Standard C Lib.


Anmelden zum Antworten