Neustart C++



  • Hallo zusammen,

    nach dem Einloggen stellte ich fest, dass mein letzter Beitrag gut 2 Jahre her ist (in der Zwischenzeit musste ich mich leider mit Java und einigen anderen Dinge herumschlagen) 🙄 .
    Nun moechte ich neu einsteigen mit C++. Da ich so gut wie alles vergessen habe, starte ich praktisch bei Null. Da ich aber gerne lese, habe ich mir die 4. Auflage von Stroustrup's Buch 'The C++ Language' gekauft, das es in dieser Auflage leider nur in Deutsch gibt (Ein Buch ueber C++11 hielt ich erstmal fuer unnoetig, bitte melden, falls dies eine Fehlentscheidung war).
    Meine konkrete Frage ist nun, ob hier ueber den Inhalt dieses Buches diskutiert werden kann (vorausgesetzt, jemand hat diese 4. Auflage ebenfalls). Denn mit der Zeit entstehen sicherlich etliche Fragen.
    Sollte der Beitrag hier fehl am Platze sein, bitte ich schon jetzt um Entschuldigung und Verschiebung in den entspr. Bereich. Sollte diese Frage schon einmal gestellt worden sein, habe ich anscheinend die Suchfunktion nicht richtig benutzt, in dem Fall bitte ich ebenfalls um Entschuldigung.

    Schoenen Gruss



  • wollewausfander schrieb:

    Meine konkrete Frage ist nun, ob hier ueber den Inhalt dieses Buches diskutiert werden kann (vorausgesetzt, jemand hat diese 4. Auflage ebenfalls).

    Der Inhalt des Buches ist C++. Das hier ist ein C++ Forum. Somit kannst du Fragen zum Inhalt des Buches stellen 😉

    Da muessen nicht einmal andere unbedingt das Buch dazu haben. Es sollte in allen C++ Buechern in etwa das gleiche stehen 🙂



  • icarus2 schrieb:

    Es sollte in allen C++ Buechern in etwa das gleiche stehen 🙂

    Wie kommst du denn darauf? Natürlich nicht!



  • icarus2 schrieb:

    Der Inhalt des Buches ist C++. Das hier ist ein C++ Forum. Somit kannst du Fragen zum Inhalt des Buches stellen 😉

    🙂

    icarus2 schrieb:

    Da muessen nicht einmal andere unbedingt das Buch dazu haben. Es sollte in allen C++ Buechern in etwa das gleiche stehen 🙂

    Ok, waere einfacher, auf eine Textpassage hinweisen zu koennen. Aber so werd ich mal versuchen, das wesentliche (zur ersten Frage) zu beschreiben und hoffe, ich hole nicht zu weit/knapp aus:
    Es geht um das Pro und Contra, Typen in Modulen oder Klassen zu definieren. Es wird eine Schnittstelle definiert in der Art:

    namespace Stack {
        struct Rep;
        ....
        void push(stack s, char c);
        ....
    }
    

    Darunter steht dann: "Stack kann nun auf unterschiedlichste Weise implementiert werden....wichtig ist, dass der Benutzer nichts darueber wissen muss". Das ganze wird dann als "Schwindel-Typ" bezeichnet. Als naechstes kommt eine ganz normale Klassendefinition, diese wird als 'Konkreter Typ' bezeichnet. Die Aussage ist nun, dass die Repraesentation bei der Implementierung mittels Klasse nicht mehr von der Benutzerschnittstelle entkoppelt ist und der Benutzer bei Aenderung der Implementierung von Stack jedesmal sein Programm neu uebersetzen muesse. Bei 'Schwindel-Typ' (also auf Modulebene) sei das nicht so. Weiter wird dann erwaehnt, dass bei Benutzung abstrakter Typen im Klassenkonzept (mittels Virtual) dieser Vorteil wieder gegeben sei. Wie ist das zu erklaeren? Ich dachte, gerade bei Klassen gibt es eine Entkopplung, waehrend in einem Modul doch mehr oder weniger immer alles 'auf einem Haufen' steht, laienhaft ausgedrueckt?!

    Danke vorab fuer Antworten.



  • Hacker schrieb:

    icarus2 schrieb:

    Es sollte in allen C++ Buechern in etwa das gleiche stehen 🙂

    Wie kommst du denn darauf? Natürlich nicht!

    Ich meinte damit "Es sollte in allen C++ Buechern fuer Anfaenger in etwa das gleiche stehen" - also von den Konzepten, die eingefuehrt werden.



  • icarus2 schrieb:

    Hacker schrieb:

    icarus2 schrieb:

    Es sollte in allen C++ Buechern in etwa das gleiche stehen 🙂

    Wie kommst du denn darauf? Natürlich nicht!

    Ich meinte damit "Es sollte in allen C++ Buechern fuer Anfaenger in etwa das gleiche stehen" - also von den Konzepten, die eingefuehrt werden.

    😉 🤡



  • Hacker schrieb:

    icarus2 schrieb:

    Hacker schrieb:

    icarus2 schrieb:

    Es sollte in allen C++ Buechern in etwa das gleiche stehen 🙂

    Wie kommst du denn darauf? Natürlich nicht!

    Ich meinte damit "Es sollte in allen C++ Buechern fuer Anfaenger in etwa das gleiche stehen" - also von den Konzepten, die eingefuehrt werden.

    😉 🤡

    Also, sehr witzig...also wirklich......



  • wollewausfander schrieb:

    Hacker schrieb:

    icarus2 schrieb:

    Hacker schrieb:

    icarus2 schrieb:

    Es sollte in allen C++ Buechern in etwa das gleiche stehen 🙂

    Wie kommst du denn darauf? Natürlich nicht!

    Ich meinte damit "Es sollte in allen C++ Buechern fuer Anfaenger in etwa das gleiche stehen" - also von den Konzepten, die eingefuehrt werden.

    😉 🤡

    Also, sehr witzig...also wirklich......

    Nein nein. Ich meinte es schon ernst. Sieh dir mal alle C++-B+cher im Internet an. Da gibt es sehr schöne Sachen zu Meta-Programmierung, Objekt-Orientierung, Anfänger-Bücher (Gute, Schlechte), welche für Umsteiger von C auf C++, ...

    Ein Buch ueber C++11 hielt ich erstmal fuer unnoetig

    👍 Du lernst genug darüber im Web.

    Aber wenn du ein konkretes Problem hast, öffne einfach immer einen Thread.



  • Hacker schrieb:

    Nein nein. Ich meinte es schon ernst. Sieh dir mal alle C++-B+cher im Internet an. Da gibt es sehr schöne Sachen zu Meta-Programmierung, Objekt-Orientierung, Anfänger-Bücher (Gute, Schlechte), welche für Umsteiger von C auf C++, ...

    Ich fand es eben etwas unangebracht, sich wechselseitig ueber Anfaenger lustig zu machen. Also was das Paradigma Objektorientierung angeht, bin ich durch Java nicht unbedingt ein Anfaenger (das imperative Paradigma aussen vor). Mir geht es um die Sprache C++ selbst, also Syntax, Semantik, Eigenschaften, Macken, Programmierstil, usw. Da beginne ich (wieder) nahe Null.

    Hacker schrieb:

    Ein Buch ueber C++11 hielt ich erstmal fuer unnoetig

    👍 Du lernst genug darüber im Web.

    Aber wenn du ein konkretes Problem hast, öffne einfach immer einen Thread.

    Ok, mach ich. Aber oben steht auch schon eine Frage. 😉



  • wollewausfander schrieb:

    Ich fand es eben etwas unangebracht, sich wechselseitig ueber Anfaenger lustig zu machen. Also was das Paradigma Objektorientierung angeht, bin ich durch Java nicht unbedingt ein Anfaenger (das imperative Paradigma aussen vor). Mir geht es um die Sprache C++ selbst, also Syntax, Semantik, Eigenschaften, Macken, Programmierstil, usw. Da beginne ich (wieder) nahe Null.

    Ich wollte mich damit ueber niemanden lustig machen. Nennen wir es halt "C++ Buecher fuer Einsteiger/Umsteiger", die einem die Grundlagen vermitteln zu einer Sprache. Ist mir egal wie man es nennt, ich wollte damit nur sagen welche Art von Buecher im meinte, da Hacker mich (wahrscheinlich absichtlich) falschen verstanden hat bzw. hat falsch verstehen wollen.



  • icarus2 schrieb:

    Nennen wir es halt "C++ Buecher fuer Einsteiger/Umsteiger", die einem die Grundlagen vermitteln zu einer Sprache.

    Ich schrieb ja, dass ich das Buch von Stroustrup habe, und nach erstem Lesen gefaellt es mir sehr gut. Wenn ich darin etwas nicht verstehe, liegt das eher an mir selbst, ich weiss nicht, ob in den Internet Einsteiger/Umsteiger Buechern dann die Antwort zu finden ist, wenn sie in aehnlicher Form da steht. Zumindest bei der obigen Frage zu Schnittstellen von Modulen/Klassen stelle ich das mal in Frage. Da geht es eher darum, warum das so ist.



  • wollewausfander schrieb:

    icarus2 schrieb:

    Nennen wir es halt "C++ Buecher fuer Einsteiger/Umsteiger", die einem die Grundlagen vermitteln zu einer Sprache.

    Ich schrieb ja, dass ich das Buch von Stroustrup habe, und nach erstem Lesen gefaellt es mir sehr gut. Wenn ich darin etwas nicht verstehe, liegt das eher an mir selbst, ich weiss nicht, ob in den Internet Einsteiger/Umsteiger Buechern dann die Antwort zu finden ist, wenn sie in aehnlicher Form da steht. Zumindest bei der obigen Frage zu Schnittstellen von Modulen/Klassen stelle ich das mal in Frage. Da geht es eher darum, warum das so ist.

    Ich hab das Buch heute auch bekommen 😃



  • Hacker schrieb:

    Ich hab das Buch heute auch bekommen 😃

    Nee nae?! 😃 Dann kannst Du mir ja vielleicht jetzt meine anfaengliche Frage beantworten. 🙂 Kapitel 2.5.4, 6. Zeile im Text. Warum muss der Benutzer sein Programm in dem Fall uebersetzen, bei Modulen aber nicht?



  • wollewausfander schrieb:

    Hacker schrieb:

    Ich hab das Buch heute auch bekommen 😃

    Nee nae?! 😃 Dann kannst Du mir ja vielleicht jetzt meine anfaengliche Frage beantworten. 🙂 Kapitel 2.5.4, 6. Zeile im Text. Warum muss der Benutzer sein Programm in dem Fall uebersetzen, bei Modulen aber nicht?

    Hab doch die 3. Auflage ^^
    Aber bei deiner Frage kann ich dir vielleicht trotzdem helfen:

    Darunter steht dann: "Stack kann nun auf unterschiedlichste Weise implementiert werden....wichtig ist, dass der Benutzer nichts darueber wissen muss".

    Das bedeutet, der Typi, der dein Interface benutzt, weiß nicht, wie du die Funktionen definierst. Was die Funktionen also tun.
    Edit: In "seiner" Implementierung kann der Benutzer natürlich auch nichts von den Membern wissen.

    wollewausfander schrieb:

    Das ganze wird dann als "Schwindel-Typ" bezeichnet. Als naechstes kommt eine ganz normale Klassendefinition, diese wird als 'Konkreter Typ' bezeichnet. Die Aussage ist nun, dass die Repraesentation bei der Implementierung mittels Klasse nicht mehr von der Benutzerschnittstelle entkoppelt ist und der Benutzer bei Aenderung der Implementierung von Stack jedesmal sein Programm neu uebersetzen muesse.

    Hmm. Wenn er (wie ich vermute), dass ganze in Source&Header aufteilt, muss er natürlich die Source nochmal Compilieren.

    Das witzige ist, dass man - wenn man eine Klasse hat - natürlich die Definition dieser Klasse nicht einfach ändern kann. Es ist ein konkreter Typ, da man seine Member genau kennt.

    Stroustrup schreibt eben komisch... ist nur was für Leute mit starken Nerven...

    Bei 'Schwindel-Typ' (also auf Modulebene) sei das nicht so. Weiter wird dann erwaehnt, dass bei Benutzung abstrakter Typen im Klassenkonzept (mittels Virtual) dieser Vorteil wieder gegeben sei.

    Es ist so, dass virtual eine bedeutende Rolle in der Polymorphie und bei der Vererbung spielt. Aber das ist ja nix für einen Anfänger wie dich, oder? Wenn du bei 0 startest?



  • Hacker schrieb:

    Hmm. Wenn er (wie ich vermute), dass ganze in Source&Header aufteilt, muss er natürlich die Source nochmal Compilieren.

    Eben das verstehe ich nicht. Es ist doch gerade der Vorteil, wenn man eine bereits implementierte Klasse hat, dass man den Header in sein eigenes Programm einbindet und das binary der anderen Klasse dazu linkt?! Und warum muss man ein Modul, wo das gerade nicht so ist, nicht mehr compilieren?

    Hacker schrieb:

    Es ist so, dass virtual eine bedeutende Rolle in der Polymorphie und bei der Vererbung spielt. Aber das ist ja nix für einen Anfänger wie dich, oder? Wenn du bei 0 startest?

    Wie ich schon schrieb, sind mir diese Konzepte von Java (nicht bestens, aber recht gut) bekannt (Klausur drueber geschrieben). Da wird die Polymorphie mittels Interfaces realisiert. Ich weiss eben nur nicht, wie das bei C++ aussieht. Aber gut, im Verlauf des Buches wird das wohl noch mehr als genug behandelt. Das hier war ja nur die Einleitung, die eigentlichen Kapitel liegen noch vor mir.



  • wollewausfander schrieb:

    Wie ich schon schrieb, sind mir diese Konzepte von Java (nicht bestens, aber recht gut) bekannt (Klausur drueber geschrieben). Da wird die Polymorphie mittels Interfaces realisiert. Ich weiss eben nur nicht, wie das bei C++ aussieht. Aber gut, im Verlauf des Buches wird das wohl noch mehr als genug behandelt. Das hier war ja nur die Einleitung, die eigentlichen Kapitel liegen noch vor mir.

    An der Stelle will er dir doch zeigen, was ein Interface ist! Die im Kapitel 2.5.3 definierte Klasse beinhaltet private Membervariablen. Wenn man dort etwas in der Implementierung ändern möchte, muss der Benutzer diese Klasse sein Programm neu übersetzen. In der C-ähnlichen Implementierung im Kapitel 2.5.1 ist da nicht der Fall, da die struct Rep nur vorwärts deklariert ist. in 2.5.4 führt er dann die Abstrakte Klasse Stack ein, die in etwa dem Java Interface entspricht.



  • mit der funktion ExitWindowsEx aus der winapi kannst du dein system neustarten



  • wollewausfander schrieb:

    Hacker schrieb:

    Hmm. Wenn er (wie ich vermute), dass ganze in Source&Header aufteilt, muss er natürlich die Source nochmal Compilieren.

    Eben das verstehe ich nicht. Es ist doch gerade der Vorteil, wenn man eine bereits implementierte Klasse hat, dass man den Header in sein eigenes Programm einbindet und das binary der anderen Klasse dazu linkt?! Und warum muss man ein Modul, wo das gerade nicht so ist, nicht mehr compilieren?

    Wenn du auch nur das geringste an einem Code veränderst, dann muss mindestens eine Source recompiliert werden. Denn ein Header ist Sinnlos, wenn er nicht von einer Soure-Datei (.cxx, .cpp, .C, .cc, ...) inkludiert wird. Ich verstehe deine Frage also ehrlich gesagt nicht ganz...

    Edit: Wenn du ein 30000-Zeilen Projekt hast, willst du natürlich nicht immer auf einmal 30000 Zeilen kompilieren. Es wird dann immer nur die jeweilige Source Kompiliert, die von den Änderungen betroffen ist, und gelinkt. DA spart man sich schon eine Menge Zeit.



  • Hacker schrieb:

    Wenn du auch nur das geringste an einem Code veränderst, dann muss mindestens eine Source recompiliert werden. Denn ein Header ist Sinnlos, wenn er nicht von einer Soure-Datei (.cxx, .cpp, .C, .cc, ...) inkludiert wird. Ich verstehe deine Frage also ehrlich gesagt nicht ganz...

    Vielleicht habe ich die Aussage nicht verstanden. Wenn es doch eine a.cpp und deren Header a.h (einer externen Person) gibt und ich in meiner b.cpp auf Funtkionen aus a.cpp zugreife (und dazu a.h inkludiert habe) und dann irgendwann a.cpp geaendert (und compiliert) wird (jedoch nur der Code, nicht die Schnittstelle), wieso muss ich dann meine b.cpp neu compilieren?

    manni66 schrieb:

    Die im Kapitel 2.5.3 definierte Klasse beinhaltet private Membervariablen. Wenn man dort etwas in der Implementierung ändern möchte, muss der Benutzer diese Klasse sein Programm neu übersetzen

    Da ist wohl mein Verstaendnisproblem, wo ist 'dort' und wo aendert wer was?

    manni66 schrieb:

    In der C-ähnlichen Implementierung im Kapitel 2.5.1 ist da nicht der Fall, da die struct Rep nur vorwärts deklariert ist.

    Ok das leuchtet ein, aber nur dann, wenn der Benutzer den Stack in seinem eigenen Code selbst implementiert, d.h. nur die Schnittstelle selbst kommt von Extern?! Wenn das so gemeint war, ist es nun klar.



  • wollewausfander schrieb:

    Hacker schrieb:

    Wenn du auch nur das geringste an einem Code veränderst, dann muss mindestens eine Source recompiliert werden. Denn ein Header ist Sinnlos, wenn er nicht von einer Soure-Datei (.cxx, .cpp, .C, .cc, ...) inkludiert wird. Ich verstehe deine Frage also ehrlich gesagt nicht ganz...

    Vielleicht habe ich die Aussage nicht verstanden. Wenn es doch eine a.cpp und deren Header a.h (einer externen Person) gibt und ich in meiner b.cpp auf Funtkionen aus a.cpp zugreife (und dazu a.h inkludiert habe) und dann irgendwann a.cpp geaendert (und compiliert) wird (jedoch nur der Code, nicht die Schnittstelle), wieso muss ich dann meine b.cpp neu compilieren?

    Ahh! Musst du, weil #include nur Zeichen für Zeichen eine Datei an die Stelle Kopiert. Und damit wird sozusagen auch deine b.cpp verändert. Also: Wenn ein Header modifiziert wird, müssen alle ihn inkludierenden Sources recompiliert werden.

    wollewausfander schrieb:

    manni66 schrieb:

    Die im Kapitel 2.5.3 definierte Klasse beinhaltet private Membervariablen. Wenn man dort etwas in der Implementierung ändern möchte, muss der Benutzer diese Klasse sein Programm neu übersetzen

    Da ist wohl mein Verstaendnisproblem, wo ist 'dort' und wo aendert wer was?

    Hmm. Die Implementation bedeutet: Die Definition der Klassenmethoden. Diese kommen ja in eine Source. Der Punkt ist jetzt, dass ich die Klasse nicht sehen kann, da ich das Buch nicht habe...


Anmelden zum Antworten