Dev-C++



  • Ist der Dev-C++ gut geeignet für die Durchführung eines C++-Einsteiger-Kurses? Er bietet immerhin eine komfortable IDE, so dass das lästige Konsolengetippe mit all den Pfad-Problemen entfällt. Die Projektorganisation ist ebenfalls unkompliziert. Leider sind die Compiler-Fehlermeldungen etwas spartanisch.
    Dafür ist er aber kostenlos und kann auch WinAPI-Programme mit C++. Wie seht ihr das?



  • ein anfänger muss meines erachtens zumindest in den ersten stunden auf die konsole gejagt werden, damit er im späteren leben genau diese 'pfadprobleme' nicht mehr hat und weiß, wie er seinen cl, g++, gxx oder sonstigen compiler ansprechen kann.

    danach ist der dev c++ sicher eine gute alternative zu teuren liscenz-ides.

    ich fahre im unterricht immer verschiedene compiler nebeneinander, damit wir auch unterschiedliche dinge ausprobieren können.
    cygwin, djgpp und studio.. da gibt es verschiedene möglichkeiten, je nach liscenz des auftraggebers und ausrichtung des unterrichts.

    windowsprogrammierung gleich im ersten monat, bevor c++ standard intus ist, sollte sowieso wegbleiben (dann können auch die armen linuxstudierenden zuhause üben *g*)



  • AFAIK hat der DevC++ mit WinAPI leichte Schwierigkeiten, jedenfalls hat er sich mal geweigert ein Standardsimpelbeispiel zu compilieren (war aus dem Petzold glaub ich.) Hm vielleicht wars auch mein Fehler, keine Ahnung 🙂



  • @elise: Danke für die Tipps. Dann werde ich DJGPP und Dev-C++ nebeneinander verwenden.

    @Bashar: Habe ich bisher nicht bemerkt. Ich verwende die aktuellste Variante. Muss mal sehen, ob ich ein WinAPI-Beispiel finde, dass sich verweigert.



  • Hallo ...

    ich habe meiner IT-Klasse mit dem Dev-C 4 + gcc 2.9 C(++) beigebracht. Das hat auch ganz gut geklappt - mit dem Fehlermeldungen konnten die meisten nach kurzer Einarbeitungszeit was anfangen und mit meinem Skript die Fehler finden und schnell beheben.

    Das Problem war vielmehr die Akzeptanz, Konsolen-Programme zu schreiben: "so etwas benutzt ja heute keine mehr" usw. WinAPI hielt und halte ich für den Einstieg als überzogen. Wenn die Leute etwas besser sind, kann man das aber durchaus mal machen lassen...



  • Die Konsolen-Programmierung ist ein Nachteil z.B. gegenüber Java-Grundlagen-Kursen, die sich recht schnell in Windows-Gefilden tummeln. Vor allem hat man hier das kostenlose Java Swing. Welcher Typ von C++-Konsolen-Programmbeispielen kommen in euren Kursen am besten an?



  • naja...

    Wir haben z.B. ein einfaches 4-Gewinnt programmiert. Ein anderes (einfaches) Beispiel war ein Getränkeautomat (das Restgeld das zurückgegeben wird). Simple Beispiele aus dem Alltag kommen IMHO am besten an. Kleinere Spiele (Tic-Tac-Toe) sind auch immer ganz OK. Oder einmal gab's im Radio eine 'Denksportaufgabe': Ein Bauer verdient insgesamt x Eur. Jedes verkaufte Huhn bringt y Eur usw. Was hat der Bauer verkauft (Welche Tiere und wie viele jeweils)? Wir haben dann einen kleinen Brute-Forcer gebastelt, um das zu lösen. Damit kann die Aufgabe 'programmieren' am besten verdeutlicht werden. Externe Dateien mit 'Trennen und Mischen' zu sortieren war allerdings nicht soooo der Knüller... ://



  • ich mach viele spiele, und viel bunt, mit plazieren, so wie früher..

    win98 und ansisequenzen, da bleibt alles gut im standard.

    das einzige, was ich mir erlaube, ist die conio.h zwecks getch.

    sag ich dann an.

    ps: im grunde sind jegliche farben jedoch nur bonbons.. es geht ums lernen einer sprache, und die farbe bringt dabei vielleicht ein wenig lust,

    fenster, also windowsprogrammierung hat da aber noch nix zu suchen...

    pps: ich habe java auf konsole gelernt.. ohne fenster, vor hundert jahren, da gab es noch eine konsolenapi .. so zum beispiel

    import corejava.*;
    
    public class Bedingungen3
    {
    	public static void main (String[]args)
    	{
    		int a;
    
    		a=Console.readInt("Zahl eingeben");
    
    		if (a==10)
    		{
    			System.out.print ("Aetsch:");
    			System.out.println("Zahl ist gleich 10");
    		}
    		else
    		{
    			if (a!=10)
    				{
    				System.out.print ("Baeh:");
    				System.out.println("Zahl ist ungleich 10");
    
    			}
    		}
    
    	}
    }
    

    ist schon lange deprecatet, schade eigentlich..
    es gibt aber irgendwo eine konsolenapi, muss ich nochmal suchen, ..

    man sollte mal konsolenspiele in java schreiben ,)



  • elise schrieb:

    das einzige, was ich mir erlaube, ist die conio.h zwecks getch.

    Das finde ich gut, denn dazu findet man keine gute Alternative. Das

    cin.get()
    

    funktioniert nicht sicher. Pures C++ ist an manchen Stellen einfach viel zu kompliziert. Soweit ich weiß, stammt conio.h von Borland, ist aber inzwischen auf allen gängigen Compilern beheimatet.

    Danke für die Hinweise.



  • Welche Bücher empfehlt ihr für den C++-Einstieg in euren Kursen?



  • Erhard Henkes schrieb:

    Welche Bücher empfehlt ihr für den C++-Einstieg in euren Kursen?

    Also ich habe ein eigenes Skript. Das hat sich in den letzten beiden Jahren auch ganz gut bewährt. Meine Bücherempfehlungen finden sich hier: http://www.ts-networld.de/?page=prog/books [nicht alles ist Einsteigertauglich]



  • mady schrieb:

    Also ich habe ein eigenes Skript

    kannst du es online stellen?



  • Anonymous schrieb:

    mady schrieb:

    Also ich habe ein eigenes Skript

    kannst du es online stellen?

    Nein - das darf ich von meiner Firma aus nicht... leider.



  • @erhard

    ich empfehle bei anfängerkursen erstmal keine bücher zu kaufen, und bringe aber der zweiten woche immer wieder mal eins mit und erläutere vor und nachteile des buchs.

    viele menschen viele geschmäcker... es ist schwer, da was zu empfehlen, alleine der sprachstil ist oft wichtig, ob einem ein buch was bringt.

    sie können dann mal reinlesen.. ansonsten geh ich nach meinem skript vor (wie mady), und die teilnehmerInnen schreiben mit.
    so lassen sie sich ein wenig zeit beim kauf von teuren standardwerken.. ich empfehle darüber hinaus die bibliotheken, der stroustrup ist immer da zu finden 🙂



  • Es gibt ja die reservierten keywords in C++. Wie bringt ihr z.B. die Speicherklassen ( auto, static, extern, register, mutable) von Variablen rüber? Geht ihr überhaupt darauf ein?



  • Du solltest auf jeden Fall bis zu einem kleinen Mehrdateienprojekt kommen (und zur Abschreckung auch mal ein richtiges makefile zeigen). Dazu finde ich dann die Speicherklassen extrem wichtig. Mach vielleicht eine Liste über alle Keywords und gehe auf so Dinge wie auto und register nur ganz kurz ein, damit es mal erwähnt wurde, praktisch spielen diese Keywords ja keine Rolle mehr. Wäre auch nicht verkehrt an der Stelle zu erwähnen, dass verschiedene Compiler eventuell noch lokale Spracherweiterungen haben und weitere keywords mitliefern können (unter der Rubrik 'was es sonst noch alles gibt'), aber das sollte dann schon reichen. static, extern ist klar, mutable müsste ich jetzt ehrlich gesagt selbst nachsehen - volatile könnte wichtig sein für's debuggen. Zu erklären, dass einem der Compiler eine Variable wegoptimieren kann, sollte gut dafür sein, ein Gefühl dafür zu bekommen, wie alles funktioniert.
    Natürlich ist es schwer, einem puren Anfänger ein Gefühl hierfür zu geben, und es wird ihn erstmal mehr erschrecken, als dass es ihm helfen wird. Aber wenn möglich, würde ich eine Extrastunde unter dem Titel 'wie es weiter geht' für die wirklich Interessierten und Talentierten dazu geben.



  • zu mutable:

    http://fara.cs.uni-potsdam.de/~kaufmann//faqs/constcor.pdf

    und aus http://www.aoenterprises.de/weiterbildung/tagebuch/hauptteil_faqs_c_plusplus.html#volatileDatentypen

    Was bedeutet das Wort mutable?

    Nachdem eine Instanz einer Klasse als const deklariert wurde, können die Instanzvariablen von außen nicht mehr verändert werden, auch dann nicht, wenn sie als public deklariert wurden.

    Um diese allumfassende Konstantenerklärung für einige Datenelemente aufzuheben, kann mutable verwendet werden.

    class Demo{ public: int i; mutable int k; ..... };
    
       void main (void)
       {
           Demo d2;
           d2.i=4;  // o.k. da Instanz d2 nicht als const erklärt
           d2.n=18; // o.k., da egal ob d2 konstant ist oder nicht, mutable Deklaration
    
           const Demo d1;
           d1.i = 4;   //--> Fehler, Zugriff nicht gestattet
           d1.n = 100; // o.k. Zugriff gestattet, da als mutable deklariert.
           .....
        }
    

    Beachte:
    Alle Datenelemente einer const-Instanz können nach wie vor über die Methoden der Klasse verändert werden.
    mutable kann nicht auf Datenelemente angewandt werden, die als static oder const deklariert worden sind.
    Instanzvariablen, die als mutable deklariert worden sind, können auch von const-Methoden der Klasse verändert werden (was normalerweise ohne mutable-Deklaration nicht möglich ist !!!).
    Ein Zeiger auf ein const-Element ist selbst nicht konstant. Daher ist folgendes erlaubt:

    class Demo { public: mutable const int *ptr; ....  };
    

    jedoch nicht:

    class Demo { public: mutable int* const ptr; ..... };
    


  • kommt auf deine zeit an, erhard..

    ich unterrichte einen monat lang jeden tag 7 stunden, aber dadurch, daß sie nun jeden tag dran sind, fehlt auch zeit zum setzen lassen.

    damit muss ich viel zeit für übungen geben. selber drauf kommen ist das a und o, debuggen lernen, eigenen code tippen, tippen, tippen..

    wenn du einmal in der woche zwei stunden hast, sieht die sache anders aus, da gibt es zeit zwischen zum setzen und selber rumprobieren.

    je nach unterrichtsform.

    static gibts ... klar, den rest auf anfrage bei projekten..
    in 4 wochen den standard durchzumachen ist hart, aber zu schaffen (aus der stl nur vector, ein minitemplate und string)

    aber überforderung istes allemal 🙂



  • Nachdem eine Instanz einer Klasse als const deklariert wurde, können die Instanzvariablen von außen nicht mehr verändert werden, auch dann nicht, wenn sie als public deklariert wurden.

    Verwirrend und ungenau. mutable und acces-specifier sind zwei völlig unabhängige Konzepte.

    Alle Datenelemente einer const-Instanz können nach wie vor über die Methoden der Klasse verändert werden

    Käse. Ist das Objekt const, können a) nur const-deklarierte Methoden aufegrufen werden und b) führt die Änderung eine nicht-mutable Instanzvariable eines const-Objekts zu undefiniertem Verhalten.

    mutable kann nicht auf Datenelemente angewandt werden, die als static oder const deklariert worden sind.

    Was direkt aus der Bedeutung von static, const und mutable folgt.

    Instanzvariablen, die als mutable deklariert worden sind, können auch von const-Methoden der Klasse verändert werden (was normalerweise ohne mutable-Deklaration nicht möglich ist !!!).

    Ungenau. Eine const-Methode kann auch nicht-mutable Instanzvariablen ändern, sofern das referenzierte Objekt nicht konstant ist.
    Das ist natürlich nur sinnvoll, wenn die zu ändernde Instanzvariable a) nicht zum logischen Zustand des Objekts gehört und b) der Entwickler oder der Compiler nicht mit mutable vertraut ist -> Stichwort: const_cast.



  • da ich unter b) fallen würde und mich momentan wie ein Kursteilnehmer fühle, muss ich jetzt sagen, dass Erhard's Antwort vielleicht nicht ganz korrekt war, aber verständlich 🙂
    Hume - die Komprimierung Deiner Anmerkungen ist extrem hoch. Das wird Stunden dauern, bis ich die entzippt habe. Ich weiß, sie galten eher Erhard - einem armen Kursteilnehmer sollte man sie nicht vorsetzen, der springt aus dem Fenster.


Anmelden zum Antworten