tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
7
ZUGRIFFE
1192
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    SOD SOD ist offline Grünschnabel
    Registriert seit
    Feb 2004
    Beiträge
    3
    Hallo zusammen!

    Ich habe vor kurzen begonnen, Visual C++ zu lernen und mir das Buch "VC++6 in 21 Tagen" gekauft.
    Ich habe auch schon etwas Erfahrung in C und weiß auch (glaube ich zumindest) dis Sache mit den Klassen halbwegs verstanden zu haben.
    Aber:

    Es war immer so, dass man eine MAIN-Funktion hatte, und von der dann in andere Funktionen gesprungen ist und mit Klassen ja eigentlich nur Variablen gesetzt und geändert hat. (2DPunkt.x - 2DPunkt.y)

    Wenn ich mir aber jetzt so ein VC++ Programm ansehe, dessen Grundgerüst ja autom. erstellt wird, finde ich weit und breit keine MAIN-Funktion. Wo definiere ich denn z.B. globale Variablen? Das ganze Programm scheint nur aus Klassen zu bestehen.

    Kann mir vielleicht jemand genauer erklären, was es nun wirklich mit den Klassen auf sich hat?

    Danke,
    SOD
     

  2. #2
    Registriert seit
    Jul 2003
    Ort
    Duisburg (NRW)
    Beiträge
    1.788
    Ui! Da hast du direkt was Kompliziertes ausprobiert!

    Was Klassen sind, kann dir dein Buch besser erklären (würde hier zu lange dauern), aber das mit den 2DPunkten geht auch, sogar besser! Also nur Geduld und lies mal weiter!

    Die vom Projekt-Assistenten angelegten Klassen sind nur Beispiele für besonders komplizierte, nicht immer elegante Klassen, die man z.B. für eine MFC-Anwendung benötigt. Aber das kann dir erstmal egal sein - versuch es erst einmal mit einer Konsolenanwendung. Dann wirst du nicht so mit Wizard-generierten Klassen totgeschlagen. Und die main-Funktion hast du dann auch direkt vor dir.

    Eine Konsolenanwendung kannst du als neues Projekt anlegen. Du hast dann die Möglichkeit, ein "Hello World"-Projekt zu erzeugen. Versuch das mal.

    Wenn dir das nicht weiterhelfen konnte, frag einfach nochmal nach.
     
    Chor: "Wir sind der Chor, und wir stimmen zu. Wir stimmen zu, wir stimmen zu, wir stimmen zu."

  3. #3
    SOD SOD ist offline Grünschnabel
    Registriert seit
    Feb 2004
    Beiträge
    3
    Erstmal danke für deine Antwort.

    Mir ist schon klar, dass meine Frage für mein Können etwas zu weit vorgegriffen ist.

    Aber es ist nicht ganz so, dass ich von C keine Ahnung hab. Hab vor ca. einem Jahr schon mal begonnen, etwas C zu lernen und auch schon eine Konsolenanwendung programmiert - ein einfaches DirectX 2D Spiel mit Hilfe von Tutorials (Von Stefan Zerbst - Vielleicht kennt den jemand?)

    Ich werde auch jetzt wieder mit einfachen Programmen beginnen - keine Frage. Hab mich aber voller Vorfreude gleich mal auf das Kapitel SDI-Anwendungen gestürzt und eine Anwendung erstellt (naja - eigentlich abgeschrieben) mit der mann mit der Maus Linien zeichnen kann. Und dabei ist mir aufgefallen, dass alles aus Klassen besteht.

    Für mich ist eine Klasse ein Variablen-Typ so wie 'int'. Und desshalb ist mir nicht ganz klar, wie ein Programm, das nur aus Klassen besteht, funktionieren kann. Ein Programm mit lauter Deklarationen wird auch nie etwas tun - oder?

    Vielleicht kann mir ja jemand eine kurze Erklärung geben, wie das wirklich zusammen hängt. Ich will auf gar keinen Fall eine Antwort, nach der ich dann ein Programm erstellen kann.

    Danke nochmals für eure Mühe.

    SOD
     

  4. #4
    Registriert seit
    Jul 2003
    Ort
    Duisburg (NRW)
    Beiträge
    1.788
    Für mich ist eine Klasse ein Variablen-Typ so wie 'int'. Und desshalb ist mir nicht ganz klar, wie ein Programm, das nur aus Klassen besteht, funktionieren kann. Ein Programm mit lauter Deklarationen wird auch nie etwas tun - oder?
    Da hast du recht!

    Im einfachsten Fall kann so ein Programm aber folgendermassen aufgebaut sein:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    
    class meine_dolle_klasse
    {
      public:
        int TuWasOderOderAuchNicht()
        {
          // irgendwas tun, meist hauptschleife oder auch nicht
          // vielleicht eingaben pollen
          return 0;
        }
    };
     
    // das Anwendungsobjekt:
    meine_dolle_klasse theApp; // könnte auch lokal in Main definiert sein 
     
    int main()
    {
      // main startet nur ein Methode des Anwendungsobjektes
      return theApp.TuWasOderOderAuchNicht();
    }

    Auch bei den MFC-Anwendungen gibt es auch irgendwo (versteckt) eine main- (oder WinMain-) Routine. In der wird allerdings (einfach ausgedrückt) nicht viel mehr gemacht, als ein (globales) Applikations-Objekt zu initalisieren (Mit der Methode InitInstance() ). Das sorgt dafür, dass Fenster geöffnet werden usw. Danach tut die Anwendung im Normalfall nichts mehr, ausser auf Windowsnachrichten zu lauschen (zum Beispiel Mausklicks). Diese Nachrichten rufen dann Methoden deines Fensterobjektes auf, das von der Anwendung (theApp) geöffnet wurde. (Das sollte jetzt nur ein ganz kurzer Abriss sein; ich weiss, dass ich sehr stark vereinfacht habe.)

    Hoffe, das hilft weiter.
     
    Chor: "Wir sind der Chor, und wir stimmen zu. Wir stimmen zu, wir stimmen zu, wir stimmen zu."

  5. #5
    SOD SOD ist offline Grünschnabel
    Registriert seit
    Feb 2004
    Beiträge
    3
    Jetzt ist mir einiges klar(er). So betrachtet eigentlich ganz logisch.

    Danke für die Mühe.

    SOD
     

  6. #6
    Registriert seit
    Jul 2003
    Ort
    Duisburg (NRW)
    Beiträge
    1.788
    Gern geschehen!
     
    Chor: "Wir sind der Chor, und wir stimmen zu. Wir stimmen zu, wir stimmen zu, wir stimmen zu."

  7. #7
    Registriert seit
    Jan 2002
    Ort
    Bayern
    Beiträge
    1.390
    ...finde ich weit und breit keine MAIN-Funktion.
    Die main-Funktion bzw. die WinMain() Funktion ist in einer Headerdatei definiert (in der WINBASE.H).
    Die Implementation, ist in der Core-Lib der MFC.
    D.h. sobald du eine MFC Anwendung mit dem Assistenten erstellst, wird diese Lib gebraucht und hat somit eine WinMain() Funktion.
    Wo definiere ich denn z.B. globale Variablen?
    Bei MFC hast du eine Instanz der Applikationsklasse (wird vom Assistenten generiert und benannt). Diese Klasse ist abgeleitet von der Klasse CApp und diese wiederum von anderen Klassen.
    Letztendlich sind so ziemlich alle MFC Klassen von CObject abgeleitet, das ist die Basisklasse aller Basisklassen von MFC.
    Zum Thema Globale Variablen:
    "Ein guter Programmierer braucht keine globalen Variablen", nee im Ernst globale Variablen kannst du entweder in der Applikationsklasse deklarieren oder in deiner Hauptfensterklasse bzw. Hauptdialogklasse.

    So das war mal ein kurzer Umriss zu MFC.
    Aber wie gesagt, Konsolenanwendungen sind zum Anfangen schon geeigneter.
    Aber wenn du die ganz Thematik der Klassen bzw. der Objektorientierten Programmierung verstanden hast, dann wird das mit der MFC schon auch etwas.

    Gruß Homer
     
    we would change the world if god gave us the source code...
    and remember, science is nothing more than reverse engineering nature...

    Current projects:
    - LdrawConverter

  8. #8
    Registriert seit
    Jul 2003
    Ort
    Duisburg (NRW)
    Beiträge
    1.788
    Die main-Funktion bzw. die WinMain() Funktion ist in einer Headerdatei definiert (in der WINBASE.H).
    Die Implementation, ist in der Core-Lib der MFC.
    D.h. sobald du eine MFC Anwendung mit dem Assistenten erstellst, wird diese Lib gebraucht und hat somit eine WinMain() Funktion.
    Aaah, das wusste ich noch nicht. Vielen Dank!
     
    Chor: "Wir sind der Chor, und wir stimmen zu. Wir stimmen zu, wir stimmen zu, wir stimmen zu."

Ähnliche Themen

  1. konkrete Klassen - abstrakte Klassen
    Von Miasto71 im Forum Java
    Antworten: 1
    Letzter Beitrag: 28.03.10, 00:18
  2. Klassen Klassen Formularerstellung
    Von Kalma im Forum PHP
    Antworten: 1
    Letzter Beitrag: 31.10.07, 19:08
  3. Properties in Klassen mit geerbten abstrakten Klassen
    Von Razorhawk im Forum .NET Café
    Antworten: 4
    Letzter Beitrag: 11.07.07, 14:35
  4. Antworten: 2
    Letzter Beitrag: 05.07.06, 14:55
  5. Antworten: 16
    Letzter Beitrag: 27.09.04, 19:57