Dev-C++



  • 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.



  • @HumeSikkins:
    Danke für die detaillierte Antwort! Du hast absolut Recht mit Deinen Anmerkungen. Die Ausführungen oben stammen aus dem Internet (siehe die entsprechenden Links, nicht gerade Anfänger-Skripte) und vermischen in der Tat einiges miteinander. Das Programmbeispiel ist doch aber anschaulich und verständlich. Ich selbst habe "mutable" bisher noch nie verwendet. Gibt es dafür eine typische Anwendung, die praktisch überzeugend ist?

    @Elise:
    Ich habe nur 12 * 45 Min. für interaktiven on-line-Unterricht, jeweils 4 * 45 Min. und dann jeweils eine Woche Pause, in der dann multiple choice-Fragen und Aufgaben/Übungen bearbeitet werden können, Nachfragen gestellt werden können, usw. Da hast Du wirklich bessere Voraussetzungen mit Deinem Zeitplan. Mein Ziel ist der Übergang zu WinAPI - das geht sicher ideal mit dem Dev-C++ - auf Basis meines Tutorials www.henkessoft.de/api1.htm .
    Den C++-Standard kann ich in der kurzen Zeit auf keinen Fall komplett durcharbeiten. Ich möchte aber die "keywords", die im Standard aufgeführt sind, gruppiert als Fahrplan verwenden - die kann man dann immer als bekannt abhaken, das sieht nach schnellem Fortschritt aus - und daher auch mehr oder weniger ausführlich erklären.

    +--------------------------------------------------------------------------+
      |asm          do             inline             short         typeid       |
      |auto         double         int                signed        typename     |
      |bool         dynamic_cast   long               sizeof        union        |
      |break        else           mutable            static        unsigned     |
      |case         enum           namespace          static_cast   using        |
      |catch        explicit       new                struct        virtual      |
      |char         extern         operator           switch        void         |
      |class        false          private            template      volatile     |
      |const        float          protected          this          wchar_t      |
      |const_cast   for            public             throw         while        |
      |continue     friend         register           true                       |
      |default      goto           reinterpret_cast   try                        |
      |delete       if             return             typedef                    |
      +--------------------------------------------------------------------------+
    

    Ich verwende dies nicht alphabetisch - wie oben aus dem Standard übernommen - sondern nach Themen gruppiert. Man kann herrlich beginnen mit false und true (das ist ja nur ein anderer Ausdruck für 0 und 1) und damit in das Binärsystem einsteigen, anschließend mit char, wchar_t (-> Unicode kurz vorsstellen), short, int, long, float, double in die vorhandenen Datentypen einsteigen, später mit if, else, while, for, switch, case, default, break, continue, goto ... Kontrollstrukturen erklären, um dann auf Strukturen und Klassen (das ist ja das wichtigste Konzept in C++) überzugehen. Anschließend exceptions, templates usw. Sachen wie mutable gehören auf jeden Fall eher an den Schluß. Das habe ich nach HumeSikkins Beitrag verstanden. Die meisten C++-Tutorials und Bücher erklären die keywords nicht komplett, was ich nicht für richtig halte. Denn das ist sozusagen das Alphabet von C++. Wie seht ihr das?

    @all:
    Wie kann man die MFC in einen kostenlosen Compiler wie Dev-C++ einbinden? Ich würde auf jeden Fall gerne den Aufbau ohne Assistent zeigen. Wie macht ihr das?



  • sorry, Doppel-Post.


Anmelden zum Antworten