Fragen Zum Einstieg in C++



  • 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



  • zarathus schrieb:

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

    keine Angst: C/C++ ist eine gängige und berechtigte Schreibweise.



  • !rr!rr_. schrieb:

    zarathus schrieb:

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

    keine Angst: C/C++ ist eine gängige und berechtigte Schreibweise.

    Das läßt sich ja zum Glück einigermaßen einfach feststellen, wenn man beobachtet, wer "C/C++" verwendet und was er sagen will.



  • die Bezeichnung "C/C++" habe ich in 3 verschiedenen Bedeutungen verwendet gesehen:

    1. man meint "C und C++", ohne genauer differenzieren zu wollen - Beispiel: "Bücher zu C/C++"

    2. man meint "C++ und C", will dabei aber auch das "reine C" betonen - Beispiel: "Projekte in C/C++"

    3. man meint C++ im Sinne einer objektorientierten Spracherweiterung von C.



  • !rr!rr_. schrieb:

    die Bezeichnung "C/C++" habe ich in 3 verschiedenen Bedeutungen verwendet gesehen:
    1. man meint "C und C++", ohne genauer differenzieren zu wollen - Beispiel: "Bücher zu C/C++"

    D.h. man will Papier sparen und geht werden tief in C++ noch in C ein 🤡

    !rr!rr_. schrieb:

    2. man meint "C++ und C", will dabei aber auch das "reine C" betonen - Beispiel: "Projekte in C/C++"

    D.h. man bekommt Leute die weder richtig C noch richtig C++ können. 🤡

    !rr!rr_. schrieb:

    3. man meint C++ im Sinne einer objektorientierten Spracherweiterung von C.

    D.h. man ist ein Apple-Jünger? Obj-C 🤡



  • genau.

    - nein: 3. heißt: man hat mal was von Objektorientierung gehört, kann aber nur C 😃



  • Es ist schade, welchen Schwachsinn hier Leute fabrizieren, wenn es nicht um ihre Lieblingsprogrammiersprache geht.

    Didaktiker5 schrieb:

    Qualitäts-Software, ... , 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 ...

    Sicher, was man vor allem an 10 und mehr Jahren weiterentwickelten C++ Anwendungen bemerkt, die von den Kunden positiv gelobbt wird.



  • zarathus schrieb:

    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.

    Wenn Du Windows-Programmierung betreiben willst (und dazu gehört eindeutig COM bzw. ActiveX), solltest du Microsoft-Tools benutzen. Dazu gehört auch eine MS-IDE und MS-Compiler. Der Compiler in Codeblocks ist bzgl. Windows-Programmierung so bei Windows 2000 Pro stehen geblieben. Für die Portierung von Linux-Projekten auf Windows noch akzeptabel, aber für die Ausnutzung von Windows-Techniken ungenügend.

    Besorge dir MSVC, am besten in der Standard-Edition. Ich kenne die Express Edition nicht sehr gut, aber diese hat definitiv keine ATL (Active Template Library) um komfortabler ActiveX zu programmieren. Auch wird die Express keine ActiveX-Tools haben. Man kann mit der Express sicherlich sowas zu Fuß entwickeln, aber die Tools in der Bezahlversion von MSVC sind definitiv hilfreich.

    Entwickelst du beruflich? Dann solltest du das Geld dafür übrige haben und sparst damit Zeit und Geld.

    Die COM-Technik definiert eine bestimmte Schnittstelle/API. Und diese kann man dann natürlich auslesen. Man kann Interfaces abfragen, und das Objekt gibt einem dann die Schnittstellen-Informationen zurück. In der MSDN gibt es viele Infos darüber. Wie man das selber entwickelt und nutzt, wird in der MSDN und auch gut bei codeproject.com erklärt... da gibt es massig Tutorials und Examples zu COM+ und ActiveX (speziell ATL).

    Beispiel-Artikel für Einsteiger:
    http://www.codeproject.com/KB/COM/comintro.aspx
    http://www.codeproject.com/KB/COM/COM_from_scratch_1.aspx
    http://www.codeproject.com/KB/COM/COMBasics.aspx

    Überischt aller Artikel:
    http://www.codeproject.com/KB/COM/
    http://www.codeproject.com/KB/atl/

    Du wirst C++ verstehen müssen. Die Artikel setzen das voraus.


Anmelden zum Antworten