Fragen Zum Einstieg in C++



  • Das Habe ich aus diesem Forumsbeitrag:

    "Windows Forms und Visual C++ MACHT KEINEN SINN!"

    Vom Moderator Jochen Kalmbach.

    Vielleicht habe ich da auch was falsch verstanden.

    Gruß

    Volker



  • Das hast du falsch verstanden, er meinte C++/CLI, eine ganz andere Sprache...

    Schau doch mal im C++ Forum vorbei 🙂 !

    Download-Links für MS VS Express findest du oben im WinApi-Forum.

    Edit 2.Satz geändert, liest sich ja ganz anders, als er gemeint war :p.



  • Ich frag'halt lieber erst mal hier um das Forum nicht sooo zu zu müllen.

    Installiert habe ich VC++ 2008 mal von einer Heft-CD herunter.

    Wenn ich ein Projekt eröffne, dann kommt die Auswahl CLR u. Windows-Forms Anwendung. Fängt man dann an ein GUI zu gestalten und die Ereignisprozedur z.B. eines Button mit Quelltext zu füllen, dann geschieht dies in der Headerdatei des Forms, so wie im Artikel von Herrn Kalmbach beschrieben.
    Deshalb denke ich, fängt man automatisch damit an C++/CLI zu programmieren und setzt auf dem .NET-Framework auf, oder nicht?

    Hier habe ich meine ???????????

    Erstelle ich eine Win32-Anwendung wird's für mich "HARDCORE". Da ist nur Quelltext, welcher kompiliert ein einfaches Fenster erzeugt. Mit dem Buch von Charls Petzold "Windows-Programmierung" kann man dann hier einsteigen wenn man möchte. Das ist alles rein Quelltextorientiert. Nix Drag & Drop.

    Wählt man Konsolenanwendung oder DLL dann scheint es sich um "normales" Iso C++ zu handeln.

    Gruß

    Volker



  • zarathus schrieb:

    Das ist alles rein Quelltextorientiert. Nix Drag & Drop.

    Ja, willst du Programmieren oder Mausschubsen lernen? 🙄

    Also mal zur Aufklärung: das Zusammenklicken einer GUI ist keine Programmierkunst. Das ist eher GUI-Kunst (die sinnvoll ist, wegen Ergonomie etc.), aber hat nichts mit Programmieren zu tun.

    Dann noch was: Win32-Fenster-Anwendungen sollte man heute auch nicht mehr machen, weil es C und nicht C++ ist! Auch das Buch von Charles Petzolt (oder wie der Typ heißt) hat nichts mit C++ zu tun, sondern mit C.
    Macht in meinen Augen für Dich und alle anderen C++-Anfänger keinen Sinn!

    Benutze für C++ GUI einfach eine C++ GUI Library. Das ist kein Hardcore! Man kann auch in C++ ohne viel Code eine GUI programmieren. Als Paradebeispiel kann ich meine Algier GUI Library nennen. 😉 Da kann man schon mit drei Zeilen C++ Code ein Fenster auf den Bildschirm darstellen. Die Einrichtung in MSVC ist auch ein Kinderspiel.
    Es gibt aber natürlich auch viele andere C++ GUI Libs: wxWidgets, gtkmm, FLTK und FOX-Toolkit.

    Aber was willst du denn jetzt? Willst du C++ lernen? Dann solltest du deine ersten Schritte nicht mit GUIs verschwenden. Weil C++ ist eine komplexe Sprache, da hat man zu Anfang viele andere Dinge zu lernen. Man kann später durch GUI-Programmierung noch mal einen Motivationsschub bekommen, wenn einem die Konsolen-UI auf den Senkel geht. 😃

    Und nochmal: .NET und C++/CLI (CLR) hat nichts mit Standard-C++ zu tun! MSVC bietet es an, aber man muß nicht.

    Was hast du denn für ein Einsteigerbuch? Es gibt nur sehr wenige Einsteigerbücher, die auch wirklich gut sind. C++ ist so komplex (nicht kompliziert!), das sehr viele Buchautoren es nicht beibringen können. Hier die Buchempfehlungen:

    • "Der C++ Programmierer" von Ulrich Breymann: http://www.cppbuch.de/ oder
    • "C++ Primer" von Stanley B. Lippman

    Alles andere würde ich nicht empfehlen!



  • zarathus schrieb:

    ...

    Grundsätzlich: C++ hat keine standardisierte UI-Bibliothek, und in C++ sollte man erst einmal C++ lernen (ohne UI), bevor man sich dann ins kalte Wasser stürzt. In Sprachen, in denen das UI-Framework zum Standard gehört, ist dies etwas anders.

    Und von Zusammenklicken hat noch niemand etwas nachhaltiges gelernt.



  • Ging aber nicht richtig, da keine Möglichkeit der Typbibliotheken-Implementierung und DesignCad verlangt ActivX, was in Lazarus leider nicht besonders geht.

    Das ist eh das killerkriterium 🙂
    Active X mit C++ entwickeln, iss alles andere als trivial. Da musst scho nen gutes verstaendniss fuer folgende Themen haben :
    C-Interfaces (Ja ActiveX hat objectorientierte C-Schnittestellen)
    NebenLaufigkeit (Threads, Threadsicherheit, Appartmentmodelle)
    optional Interprozesskommunikation/COM-Moniker (falls du extprozess COM verwendest)
    wenn du ATL verwendest (die Biblio von MS direkt fuer Active 😵 : Templates bis zum abwinken ....

    Damit hasst du so ziemlich alle schwergewicht Probleme von C++ im Boot !!!
    ActiveX ist zwar nett, aber eignet sich IMHO absolut ned zum Einstieg in die C++ entwicklung ^^

    Ciao ...



  • In jedem Fall ist es vernünftiger, zuerst C zu lernen, bevor man sich mit C++ beschäftigt.
    Viele grundlegende Dinge (Variablen, Schleifen, Kontrollstrukturen, Funktionen) braucht man ohnehin bei beiden Sprachen.
    Wenn dann C für irgendetwas nicht mehr reichen sollte, lernt man eben die objekt- und schablonen- orientierten Programmierkonstrukte von C++ noch dazu.
    Aber für GUIs ist Delphi sowieso besser als C++ geeignet, erst recht, wenn's schnell gehen soll.



  • Didaktiker5 schrieb:

    In jedem Fall ist es vernünftiger, zuerst C zu lernen, bevor man sich mit C++ beschäftigt.

    NEIN! Man gewöhnt und lernt nur für C++ unsinnige C Praxis. Und bei C++ darf man sich wieder den C-Kram aus dem Kopf radieren, was nicht einfach ist.

    Didaktiker5 schrieb:

    Viele grundlegende Dinge (Variablen, Schleifen, Kontrollstrukturen, Funktionen) braucht man ohnehin bei beiden Sprachen.

    Dann kann man die Grundlegenden Dinge ja auch gleich in C++ lernen. Und WENN man mal C machen sollte, kann man das Wissen da auch anwenden.

    Warum müssen immer Unreg-Poster mit ihrer Inkompetenz glänzen?



  • Didaktiker5 schrieb:

    In jedem Fall ist es vernünftiger, zuerst C zu lernen, bevor man sich mit C++ beschäftigt.
    Viele grundlegende Dinge (Variablen, Schleifen, Kontrollstrukturen, Funktionen) braucht man ohnehin bei beiden Sprachen.
    Wenn dann C für irgendetwas nicht mehr reichen sollte, lernt man eben die objekt- und schablonen- orientierten Programmierkonstrukte von C++ noch dazu.
    Aber für GUIs ist Delphi sowieso besser als C++ geeignet, erst recht, wenn's schnell gehen soll.

    Bei solchen Erklärung weiß ich, woher die Programmiersprache C/C++ kommt 🤡



  • Vielen Dank erst mal für die vielen Antworten.

    Also wenn ich das richtig verstanden habe, gibt es KEINE freie C++ IDE mit GUI-Erstellung per Drag & Drop. MSVC++ 2008/2010 macht zwar Windows-Forms, aber man Programmiert dann C++/CLI und das ganze wird zu MSIL-Code compiliert, richtig?

    Es geht mir einfach um eine zügige Erstellung des Layoutes meiner Eingabemaske, von der aus wiederum Fenster aufgerufen werden die dann u.a. Charts enthalten wo Berechnungsergebnisse graphisch ausgegeben werden. Hierfür habe ich mich (für meine Zwecke hinreichend) in Delphi/Lazarus eingearbeitet ohne großartig an der Konsole herumprogrammiert zu haben. Wobei das mit FPC prima geht, da man eine Konsolen-IDE hat und nicht erst über die DOS-Eingabeaufforderung den Compiler anwerfen muß.

    Mit entsprechenden Unterlagen sollte es meiner Meinung nach möglich sein C++ unter Verwendung von GUI-IDE's zu erlernen.
    Gerade habe ich mal "Jetzt lerne ich C++" mit "Jetzt lerne ich Delphi" verglichen. Der Einstieg bei C++ mit einem Konsolenprogramm, bei Delphi ein GUI.

    C++ scheint mir "Konsolenlastiger" zu sein.

    BEVOR ich mit Delphi anfing war ich schon mal bei C++. Mit dem Borland C++ Builder aus dem Buch "C++ für Kids". Ging auch mit GUI los. Nur leider ließ sich das Progrämmchen nicht auf einem anderen Rechner verwenden.

    Was ActiveX angeht, so will ich da nix Entwickeln, sondern DesignCAD wird stellenweise über irgendwelche "Variants" angesprochen, welche sich bei Delphi in der ActiveX-unit befinden und diese bei Lazarus leider etwas fehlerhaft ist.
    Auch konnte ich in Lazarus keine Wrapper-Class aus der Typbibliothek von DesignCad erzeugen.
    Deshalb die Frage der Möglichkeit der Implementierung von Typbibliotheken.

    Das Verwenden von wxWidgets in C++ scheint mir ähnlich dem TCL/TK bei Python. Liege ich da richtig?

    Die Bücher die ich nutze sind "C++ für Kids", "Das C/C++ Kompendium" von Dirk Louis aus dem M+T-Verlag, Das C++ Büchlein von Helmut Erlenkötter (Konsole Konsole Konsole), Und "Richtig Einsteigen: MSVC++ 2008" (gab's zum halben Preis, da ja jetzt bekanntlich 2010 ansteht). Aus dem Richtig Einsteigen habe ich das mit dem MISL-Code.

    Gruß

    Volker



  • zarathus schrieb:

    Also wenn ich das richtig verstanden habe, gibt es KEINE freie C++ IDE mit GUI-Erstellung per Drag & Drop.

    QTCreator und andere gibt es durchaus (Ebenso wie Erweiterungen oder Zusatzprogramme für diverse IDEs). Aber dennoch ist jede UI-Programmierung in C++ erst mit einem soliden Grundlagenwissen sinnvoll, und dazu sind Konsolenprogramme meist die beste Wahl.

    zarathus schrieb:

    Mit entsprechenden Unterlagen sollte es meiner Meinung nach möglich sein C++ unter Verwendung von GUI-IDE's zu erlernen.

    C++ ist wesentlich komplexer als Delphi & Co. Selbst wenn du nicht alles benötigst, solltest du jedenfalls einen Fehler nicht machen: Zu meinen das wenn du schon eine Programmiersprache kannst, das du in C++ gleich zu der Kür wechseln kannst. Niemand erwartet das du bis in die Ewigkeiten Konsolenprogramme tippst, aber du solltest wenigstens ein gutes C++ Buch (z.B. Thinking in C++ Volume 1+2 oder C++ Primer) gelesen haben (ggf. noch mit "Effektiv C++ Programmieren" kombiniert).

    zarathus schrieb:

    C++ scheint mir "Konsolenlastiger" zu sein.

    Nein, nur ist dies in C++ die Kür.

    zarathus schrieb:

    BEVOR ich mit Delphi anfing war ich schon mal bei C++. Mit dem Borland C++ Builder aus dem Buch "C++ für Kids". Ging auch mit GUI los. Nur leider ließ sich das Progrämmchen nicht auf einem anderen Rechner verwenden.

    Weil es kein C++ war. Du hast VCL (aus Delphi stammend) mit ein wenig C++ "light" genossen. C++ ist aber vom Aufbau anders als in der VCL, oder sollte man sagen: die VCL verhält sich nicht so wie man es normalerweise von C++ gewohnt ist (Sei es schon der Zwang zu dynamischer Speicheranforderung, sei es das die Abläufe in VCL-Klassen teilweise anders als in C++ sind, sei es das der C++ Builder Compilerspezifische Spracherweiterungen nutzt).

    Wenn du kein C++, sonder Drag&Drop lernen willst, ist der C++ Builder schon recht gut (und teuer).

    zarathus schrieb:

    ...ActiveX...

    ...ist eine Hölle unter allen Sprachen/Compilern die nicht spezielle Schnittstellen anbieten. Unter Visual Basic und Delphi mag es noch einigermaßen gehen, aber wenn ich die Auswahl habe meide ich ActiveX wie die Pest.

    zarathus schrieb:

    ...Die Bücher die ich nutze sind "C++ für Kids", "Das C/C++ Kompendium" von Dirk Louis aus dem M+T-Verlag, Das C++ Büchlein von Helmut Erlenkötter (Konsole Konsole Konsole), Und "Richtig Einsteigen: MSVC++ 2008" (gab's zum halben Preis, da ja jetzt bekanntlich 2010 ansteht). Aus dem Richtig Einsteigen habe ich das mit dem MISL-Code.

    Bis auf das Buch vom Erlenkötter hast du meines Erachtens Bücher für die runde Papierablage (Nachtrag: da einige den Ausdruck vielleicht nicht kennen, hiermit ist der Mülleimer gemeint) besorgt, keines davon würde ich auch nur annäherungsweise als gut bezeichnen (Eher im Gegenteil). Ich hoffe nur, dass das Buch von Erlenkötter seit der ersten Auflage massiv fehlerbereinigt wurden ist (und auch wenn es nur ein sehr kleinen Einstieg liefert, und garantiert auch nicht auf meiner Empfehlungsliste stehen würde, ist es mit Sicherheit besser als die anderen Bücher zusammen genommen).



  • Also gut. Dann fang ich mit den Grundlagen an. Der Winter steht vor der Tür, die Nächte werden länger...

    Eines würde mich jetzt doch noch interessieren (ohne jetzt einen Krieg vom Zaun brechen zu wollen):

    C++ sei komplexer als Delphi & Co.
    Heißt das, daß man mit C++ mehr machen kann als mit Pascal bzw. Objekt-Pascal?
    Ich hatte den Eindruck, daß z.B. Hardwarezugriffe (Serielle Schnittstelle) mit Delphi genauso gut funktionieren.

    Die Hintergründe, weshalb ich mir C/C++ aneignen will, sind, daß z.B. Programme wie Scilab/Scicos auch C/C++ DLL's verarbeiten. Oder Mikrocontroller,
    Also eine Sprache für alles. Zugriffe auf Open Office (geht natürlich auch mit Pascal/Delphi).

    Ein sehr großes Lob schon mal jetzt an dieses Forum. Man bekommt sehr zeitnah Antworten.

    Da gibt es viel viel schlechtere Foren, soviel steht fest.

    Und jetzt geht's los...

    Gruß

    Volker



  • Bitte nicht C/C++ schreiben. Das ist wie Cobol/Java.



  • zarathus schrieb:

    C++ sei komplexer als Delphi & Co.
    Heißt das, daß man mit C++ mehr machen kann als mit Pascal bzw. Objekt-Pascal?

    Nein.

    Manchen Leuten können ohne Servolenkung besser fahren und manche mit.



  • Werd's mir merken. Ab jetzt nur noch C++!!

    Und wer hat die Servolenkung?

    Gruß

    Volker



  • zarathus schrieb:

    Werd's mir merken. Ab jetzt nur noch C++!!

    Und wer hat die Servolenkung?

    Gruß

    Volker

    Delphi, dafür hat C++ den Welt-stärksten Motor.



  • Mit C++ kann ich gar nicht mehr machen als mit Delphi. Ich kann es durch die Komplexität von C++ aber besser umsetzen. Sowohl für den Moment als auch für die Zukunft, sprich Wartung und Wiederverwendbarkeit. Ein simples Beispiel sind hier die Templates, mit denen ich sowohl typsichere als auch hoch wiederverwendbare Komponenten entwickeln kann. Und der Hammer ist Template-Metaprogrammierung: ich kann in C++ Code einen Code schreiben, der zur Compiletime C++ Code erzeugt. Und ich kann es noch weiter treiben: ich kann in C++ Code einen Code schreiben, der zur Compiletime Berechnungen durchführt. Das muß man sich erstmal als Außenstehender auf der Zunge zergehen lassen! Es ist halt Metacode. Wofür andere Sprachen externe Tools benötigen, bringt C++ alles in Serienausstattung mit. Das macht es komplex und will auch gelernt sein, will man es anwenden!

    Die Templates und Metaprogrammierung sind dabei nur ein von vielen C++-Features, die C++ komplex machen.

    Ich weiß aus meiner langjährigen beruflichen Java-Programmierung, das simple Sprachen wie Java, alle fehlenden Features die wegen angeblicher Einfachheit weg gelassen wurden, am Ende doch durch externe Tools und Frameworks kompensiert werden. Was wir nicht auf Arbeit alles einsetzen, um dort hin zu kommen, was ich mit C++ und Betriebssystem-API im Direktzugriff habe, glaubt man man nicht.

    C++ ist komplex. Aber ich kann mich entscheiden, was ich davon nutze. Wenn ich keine Metaprogrammierung brauche oder noch nicht gelernt habe, lasse ich es weg. Ich komme auch mit einem C++-Subset über Umwege zu meinem Ziel, so wie ich es auch in Java oder Delphi über Umwege machen würde. Aber ich kann mich mit den Jahren in die C++ Features einarbeiten und besseren Code schreiben. Und ja, richtig gelesen: mehrere Jahre lernen!



  • zarathus schrieb:

    Also wenn ich das richtig verstanden habe, gibt es KEINE freie C++ IDE mit GUI-Erstellung per Drag & Drop.

    Warum muß der GUI Designer in der IDE drin sein? Kann doch auch ein externes Programm sein. Ist doch egal für das Ergebnis.

    Noch mal: man braucht für die meisten Masken keinen GUI-Designer! Ich habe schon sehr komplexe Masken erlebt wo man ohne GUI-Designer verloren war, aber eher selten. Und das waren dann auch eher unergonomische Masken.
    Meistens kann man es mit Code lösen, weil Masken meistens wenig Komponenten enthalten. Ich zeige dir mal ein Beispiel mit C++ Code:
    http://algierlib.tigris.org/wiki/HowTo/LayoutSendMessage

    Dabei ist das nicht mal das Optimum. Ich habe da noch ein DSL-Konzept für Algierlib im Kopf, damit der C++ Code noch kürzer wird.

    Aber um dich zu beruhigen, es gibt genug GUI-Designer für C++:

    1. FLUID (Einführung als Video) von FLTK
    2. http://glade.gnome.org/ für GTK+ und gtkmm
    3. http://www.wxformbuilder.org/ für wxWidgets
    4. QtDesigner



  • Artchi schrieb:

    ... Was wir nicht auf Arbeit alles einsetzen, um dort hin zu kommen, was ich mit C++ und Betriebssystem-API im Direktzugriff habe, glaubt man man nicht.

    Tja, was wäre wohl C++ (und eigentlich jede andere 'Höhere Programmiersprache') ohne die verteufelten C-Betriebssystem-APIs. Wohl auch nicht recht viel mehr als eine von tausenden, für sich alleine genommen 'sinnleere' Skript-Sprache, und eine sehr bedenkliche noch dazu ...
    Die Semantik von C++ verletzt nämlich das POLS (Principle Of Least Surprise) in gröbster Art und Weise. Angesichts gleichlautender Funktionen, die je nach Lust und Laune die unterschiedlichsten (== unvorhersagbarsten) Dinge tun - also defintiv für Überraschungen gut sind - und bei deren Ausführung sich der Programmablauf auch gerne unangekündigt in 'unsichtbare' aber leider doch vorhandene Ausnahme- behandlungsroutinen verabschiedet, lässt sich bei größeren Quellcode-Abschnitten fast nie genau vorhersagen, was bei Ausführung desselben auf den Anwender oder auch auf Wiederverwender des Quellcodes zukommen wird ...
    Die zahlreiche verbuggte C++ - Anwendersoftware unserer modernen Zeit ist ja nur eine logische Folge davon und spricht Bände.
    Gar nicht auszumalen, was erst passiert, wenn eines Tages auch die
    C-Implementierer von Betriebssystem- und Systemnahen APIs ähnlich schlampig zu Werke gehen wie ihre C++ Skript-Kiddie-Kollegen und dann keine zuverlässige Auskunft mehr darüber geben könnten, was ihre Schnittstellen eigentlich tun.

    Qualitäts-Software, deren Funktionieren man (bei genaue festgelegten Domain-Voraussetzungen) auch garantieren möchte, wird man sich mit C++ so schnell nicht basteln können. Eher einfach nur verbuggte, kurzlebige Massenware, die ja in 3 Jahren oft auch gar nicht mehr funktionieren soll damit man den ahnungslosen Anwendern dann mal auf die Schnelle die Version 2.0 verscheppern kann ('Goldplating' der unangenehmen Sorte, weil ja bereits die erste Version oft schon verbuggt war - weite Teile des Quellcodes aber natürlich wiederverwendet werden ... man ist ja so objektorientiert, nicht wahr?)

    Also oft ist weniger mehr, bzw. je nach Qualitäts-Anforderungen an die Software, die man entwickeln soll (Darf es auch ein bisschen verbuggt sein und soll eine Beta-Version (die nie Alpha erreicht) möglichst schnell verfügbar sein -> C++.
    Soll die Software in einer (relativ) genau spezifizierten Mindest-Umgebung garantiert das tun, was im Handbuch steht (und nichts anderes) -> C.

    mfg Herr Experte



  • Hallo Artchi,

    vielen Dank für die Links. Du hast mich überzeugt. Es geht auch ohne GUI's in der IDE. Und sicherer ist es allemal die Grundlagen zu verstehen, auch in Pascal.

    So in's Wasser springen und dann Halme suchen zum Rausziehen das bringt wahrscheinlich weniger wie vernünftig von vorne anzufangen. Ich hab' das bisher immer so gehalten, daß ich eine Idee hatte und die Umsetzen wollte. Dann wurde das Notwendige zusammengesucht. Ist nicht zwingend eine saubere Strategie. Man wird vermutlich nur ein gewisses Level in der Programmierung erreichen, und sich nur schwer darüber hinaus weiterentwickeln.

    Zu den Typbibliotheken habe ich trotzdem noch eine Frage, auch wenn sie zu früh kommt. In diesen Dingern scheint etwas versteckt zu sein, woraus IDE's von MSVC++ oder VB, oder #develop DLL's Erzeugen. Mit Verweis wird das hinzugefügt. Man hat dann in einer Baumansicht die Klassen die in der DLL drinne stecken.
    Im Falle von DesignCAD steckt die "Fernsteuerung" COM und OLE wohl auch darin. Und so diverser ActivX-Zugriff.

    Wie bindet man diese Typbibliotheken oder die entsprechende DLL z.B. in CodeBlocks ein? Oder wenn man seine Programme mit einem einfachen Editor schreibt? Im FeePascal-Buch konnte ich über DLL nachlesen, dass deren Funktionen im Programm wo sie aufgerufen werden sollen genauso lauten müssen wie in der DLL wo sie enthalten sind. Dazu müsste man in die DLL gucken können.

    Ich hatte mal iegendwann OLE-Viewer am Start, aber meine in Erinnerung zu haben, dass zwar die Klassenansicht sichtbar wurde, aber nicht der eigentliche Funktionsaufruf. Bin mir nicht mehr sicher.

    Das ist wohl für den Anfang eh zu viel.

    Erst mal werde ich versuchen C++ Primer zu ergattern.

    Und nochmal DANKE für die Tipp's und Links.

    Volker


Anmelden zum Antworten