Fragen Zum Einstieg in C++



  • Hallo liebe C++ Gemeinde,

    ich bin relativ neu in C++ und mir geht so einiges durch den Kopf.
    Ich möchte Makros für DesignCad, ein kleines CAD-Programm entwickeln. Also kaufte ich mir zunächst mal C++ für Kids. Ganz netter Einstieg in die IDE usw.

    Leider ließen sich mein Progrämmchen nicht auf einem anderen Rechner nutzen. Es fehlten irgenwelche DLL's... Das ist wohl Absicht von Codegear 🙂

    Dann fiel mir eine Delphi Personal 7 CD in die Finger und ich hab' damit mein ein Makro mit Fernsteuerung von DC realisiert. Pesonal 7 nur für Eigenbedarf. Also Lazarus. Ging aber nicht richtig, da keine Möglichkeit der Typbibliotheken-Implementierung und DesignCad verlangt ActivX, was in Lazarus leider nicht besonders geht.

    Die Eingabemaske des Makros ist ein GUI, welches 13 Texboxen, 53 Labels, 6 CheckBoxn, 3 Knöpfe und noch einiges enthält. Das war mit Drag & Drop schon ein Gefummel...

    Jetzt dachte ich an einen Umstieg auf C++. Eine Open Source IDE sollte es sein: Code Blocks. GUI mit wxWidgets und wxMathplot. Und hier gings gestern Abend schon los. Die Screenshots fand ich nicht schlecht, aber mal so in's blaue hinein ein GUI zu ertsellen fiel mir doch recht schwer. Es scheint mir schier sehr Zeitaufwendig das oben beschriebende GUI in wxWidgets nach zu bilden.
    Gibt es da irgendwie Tricks, oder ist es auch hier halt mühevolle Kleinarbeit Quelltextorientiert die einzelnen Labels uvm. zu positionieren?

    Mit den MSVC++ wollte ich nicht arbeiten, da ich hier im Forum bereits gelesen habe, dass es kein richtiges C++ sei. Ich habe auch aus einem MS-Buch, dass VB, C# und wohl auch MSVC++ auf .NET aufsetzen und letztlich MSIL-Code erzeugt wird. Also ähnlich wie bei Java. Dann kann man gleich VB nehmen.
    Ein kleiner Test eines DesignCad Makros, geschrieben in Delphi, VB und C# ergab, dass der "richtige" Byte-Code von Delphi ca. 1s schneller ist als VB und C#. Vb und C# ca. 2,8 s, Delphi ca. 1,8 s. Aber es geht mir nicht zwingend um die Geschwindigkeit.

    Bei VB kommt als Funktionsplotter in dem dem Makro ZedGraph zum Einsatz. Hier muß beim Portieren auf einen anderen Rechner die ZedGraph.dll mitgegeben werden. Ebenso die DLL, welche durch den Import der Typbibliothek erzeugt wird.
    Ziel war eigentlich nur eine Datei, nämlich die EXE des Makros und alle Funktionalität ist darin. So wie bei Delphi.

    Was ich also brauche ist eine (freie oder Low-Cost) IDE mit der ich GUI's erzeugen, Typbibliotheken implementiern, "COM-OLE-ActiveX"-Fernsteuerung einbinden und einen Funktionsplotter/Chart nutzen kann.

    Hat jemand von Euch da eine Idee?

    Gruß

    Volker



  • zarathus schrieb:

    ...kaufte ich mir zunächst mal C++ für Kids.

    Kenne ich nicht, hört sich aber nicht gut an (nach Möglichkeit umtauschen) *.

    zarathus schrieb:

    Jetzt dachte ich an einen Umstieg auf C++.

    Imho eine gute Wahl.

    zarathus schrieb:

    Code Blocks

    Ja, ist okay.

    zarathus schrieb:

    Mit den MSVC++ wollte ich nicht arbeiten, da ich hier im Forum bereits gelesen habe, dass es kein richtiges C++ sei.

    Wo hast du _das_ denn bitte gelesen? In den neuen Versionen 2008/2010 hält er sich an den Standard, bei alten Versionen (VC 6) war's allerdings noch anders.

    Da du ja offensichtlich für Windows entwickeln möchtest, würde ich mir an deiner Stelle die freie Express Version von Visual Studio 2010 herunterladen.
    Du bekommst eine komplette IDE, einen klasse Compiler / Linker, viele zusätzliche Tools, einen eingebauten Resourceneditor u.v.m., alles für lau.
    Für Windows gibt es (z.Z.) einfach nix besseres.
    Meiner Meinung natürlich nach 🙂 .
    Und bei zukünftigen Fragen / Problemen direkt im C++ Forum posten 😉 .

    * Es gibt viele gute Bücher für C++, leider aber noch eine viel größere Auswahl an Mist.
    Gut:
    - C++ Primer
    - Die C++ Programmiersprache (nicht für absolute Programmierneulinge)
    - diverse andere Sachen, einfach mal die Forensuche im C++ Forum bemühen.



  • 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


Anmelden zum Antworten