Schritt für Schritt: eine Klasse erstellen



  • estartu schrieb:

    Kurzfassung: Was für Funktionen und Variablen braucht die Klasse? Reinpacken -> Fertig. 🤡

    Witzig. So einfach hätte ich es mir gar nicht vorgestellt. 😃

    estartu schrieb:

    Diese 3 Euro Hefte, da ist eines zu C++ dabei,

    Was denn für Hefte? Sorry, verstehe ich nicht.

    estartu schrieb:

    wird anhand eines Dackels erklärt

    So eine Schei**e. Wieso wird die OOP immer an total schwachsinnigen Beispielen erklärt? Ein Dackel, ein Auto, ein Meerschweinchen,...
    Kein Wunder, dass OOP-Gegner keinen Sinn in der OOP sehen, wenn man es nicht einmal schafft, für Anfänger ein einfaches OOP-Beispiel zu konstruieren.

    estartu schrieb:

    Aber am besten lernst du es anhand einer Aufgabe.

    Sehe ich auch so, aber erstens hab ich keine Aufgabe und zweitens hab ich ja NULL (Wortspiel) Ahnung, wie man an die Programmierung rangeht. Also die ersten Schritte müssten schon irgendwie erklärt sein.
    Also nicht nur, wie ich "Was für Funktionen und Variablen braucht die Klasse? Reinpacken" mache, sondern auch, wie ich eine Klasse erzeuge, wo ich den Code hinschreiben muss, wie ich die Klasse später in ein Projekt einbinde usw. usw.

    mfg





  • vollkommenegal schrieb:

    estartu schrieb:

    Diese 3 Euro Hefte, da ist eines zu C++ dabei,

    Was denn für Hefte? Sorry, verstehe ich nicht.

    Sorry, mir fällt der Name von denen nicht ein und ich habs nicht hier. 🙄
    Die Hefte gibts in vielen Bahnhofsbuchhandlungen: Din-A-4 weiß mit grünem Rahmen.

    Kein Wunder, dass OOP-Gegner keinen Sinn in der OOP sehen, wenn man es nicht einmal schafft, für Anfänger ein einfaches OOP-Beispiel zu konstruieren.

    Das sind einfache Beispiele. 🙄
    Oder wären dir Bankkonten lieber? Die hatte ich auf irgendeiner OOP Schulung mal.
    Denk dir was aus, zu dem du eine Klasse entwickeln willst, dann kannst du dir das Thema auch erarbeiten. Nur theoretisch Bücher wälzen bringt da nix.

    PS: Ich schieb dich mal ins rudpf, geht ja hier nicht wirklich um MFC. 😉



  • guenni81 schrieb:

    http://www.se.fh-heilbronn.de/usefulstuff/VCPLUS6/inhalt.htm

    Kenne ich, verstehe ich aber nicht, weil ich nicht weiß, wie man an den Dialog für "Das Bibliotheksmodul erstellen" kommt. (Abbildung 16.1)
    Ich kann in meinem VS nirgends eine "Win32 Bibliothek" erstellen?! 😞

    guenni81 schrieb:

    in jedem guten C++ Tutorial eine Beschreibung wie man Klassen erstellt und nutzen kann.

    Sehe ich nicht so; zumindest hab ich noch kein Tutorial mit einem sinnvollen und verständlichen Beispiel gesehen, so dass man auch nachvollziehen kann, WARUM man dies und das macht und wozu das alles gut ist. (Aber das ist vielleicht ein subjektives Problem von mir?)

    mfg



  • Dieser Thread wurde von Moderator/in estartu aus dem Forum MFC (Visual C++) in das Forum Rund um die Programmierung verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • vollkommenegal schrieb:

    Sehe ich nicht so; zumindest hab ich noch kein Tutorial mit einem sinnvollen und verständlichen Beispiel gesehen, so dass man auch nachvollziehen kann, WARUM man dies und das macht und wozu das alles gut ist. (Aber das ist vielleicht ein subjektives Problem von mir?)

    mfg

    Oha, ein Warum-Frager 😃
    Dieser Gattung gehöre ich auch an. 🙂

    Kleiner Vorschlag: DU denkst dir was aus, wozu du eine Klasse entwickeln möchtest - ich (und vielleicht auch andere) helfen dir dabei, indem wir dich in die richtige Richtung dirigieren.

    Die Klasse kann es auch ruhig schon so ähnlich geben, z.B. in der MFC - und du baust darauf auf oder was besseres. 😉
    Wie wäre es mit einem String?



  • estartu schrieb:

    Oha, ein Warum-Frager 😃

    Sind wir das nicht alle...irgendwie? 😃

    estartu schrieb:

    Kleiner Vorschlag: DU denkst dir was aus, wozu du eine Klasse entwickeln

    Na ja, ich hab gestern dies gesehen

    http://www.c-plusplus.net/forum/viewtopic-var-t-is-55235.html

    und mir den Code von Unix-Tom genommen und ausprobiert: läuft. Dann habe ich mir überlegt, dass es gut wäre, wenn ich den Code irgendwie in eine Klasse packen könnte, denn sowas kann man vielleicht mal brauchen. Bin auf "Add class" gegangen und stand dumm da, denn ich hatte keine Ahnung, was ich machen musste. 😞

    Und da wir gerade bei Unix-Tom sind: ich war auf seiner HP und habe mir die MySQL-DLL geholt und angesehen: massig Dateien, aber leider keine einzige Beschreibung dabei, was ich damit machen muss, um die DLL nutzen zu können.

    mfg



  • Hmm, aus dem Code werde ich nicht ganz schlau, aber das wird schon werden. 😉
    Also, zwei Dinge zuerst: Hast du schon einen Namen für die Klasse?
    Und: Fällt dir eine sinnvolle Basisklasse ein?
    Ja: Dann ist es eine MFC Klasse und du musst die Basisklasse im Dialog auswählen.
    Nein: Dann ist es eine allgemeine Klasse.

    Als nächsten Schritt zeig mal, welche Funktionen in die Klasse rein sollen, also aus dem Beitrag.
    Einfach hier reinkopieren.



  • // Wenn möglich im header
    class Koerper
    {
    public:
        int iGroesse;
        int iGewicht;
        int iMase[3];
        int iBeinlaenge;
        SetMase(int iMas1, int iMas2, int iMas3)
        {
            iMase[0] = iMas1;
            iMase[1] = iMas2;
            iMase[2] = iMas3;
        }
    };
    
    // irgendwo in der cpp
    Koerper Ich;
    Ich.iGroesse = 183;
    Ich.iGewicht = 80;
    Ich.SetMase(150,30,120);
    Ich.iBeinlaenge = 45;
    

    Da hast du ein Klassenbeispiel 😉



  • Hi!

    Ja, ein super schlechtes! 🙄

    grüße



  • ich habe nicht gesagt dass es gut ist..
    aber er weiss ja nichtmal wie und wo er eine klasse deklarieren muss..
    also hilft ihm das ja evtl in die richtige richtung 😃



  • Ein sehr verbesserungsfähiges Beispiel...

    Ich habe übrigens (eher zufällig) grade ein recht nettes Buch mit einem umfangreichen Teil zu Klassen entdeckt:
    Visual C++ .NET ENT-PACKT | ISBN: 3826608933
    Es ist nicht sooo viel zu VC.net drin, wie ich gehofft hatte - dafür aber eben ein sehr umfangreicher Grundlagenteil. 👍



  • estartu schrieb:

    Hmm, aus dem Code werde ich nicht ganz schlau, aber das wird schon werden. 😉

    Der Code ruft nur ne URL auf und liefert das zurück, was die Webseite ausspuckt. Also bspw.

    http://home.pages.at/joachimh/cplusplustest.php

    estartu schrieb:

    Also, zwei Dinge zuerst: Hast du schon einen Namen für die Klasse?

    WebConnect?

    estartu schrieb:

    Und: Fällt dir eine sinnvolle Basisklasse ein?

    Nein, ich weiß nicht einmal, was ne Basisklasse ist bzw. wozu ich die brauche. 😞

    estartu schrieb:

    Ja: Dann ist es eine MFC Klasse und du musst die Basisklasse im Dialog auswählen.
    Nein: Dann ist es eine allgemeine Klasse.

    Sorry, das ist mir zu schnell. Ich versteh kein Wort.

    estartu schrieb:

    welche Funktionen in die Klasse rein sollen, also aus dem Beitrag.

    Na ja, erst einmal das, was Unix-Tom gepostet hat:

    CString somecode, s;       
         CInternetSession session("test",1,INTERNET_OPEN_TYPE_PRECONFIG); 
    
         CStdioFile* pFile = NULL;    
           CString strUrl("http://www.sensorme.de"); 
    
       try   
       {   
               pFile = session.OpenURL(strUrl,1,INTERNET_FLAG_TRANSFER_BINARY,NULL,0); 
    
            if(pFile)   
            {            
                while (pFile->ReadString(somecode) != NULL)   
                {   
                    s = s + somecode;   
                }   
                pFile->Close();   
            }        
       }   
       catch (CInternetException* e)   
       {         
            e->Delete(); 
            session.Close(); 
            CloseHandle(session);   
       }
    

    Vielleicht als getHtmlSource(), so wie Rapha es in dem Thread schon versucht und genannt hat?!

    @BigNeal: nein, das hilft nicht, denn Du schreibst zwar den grundsätzlichen Aufbau für eine Klasse hin (den kenne ich schon von PHP), aber "wie und wo ich eine klasse deklarieren muss", schreibst auch Du nicht. Wo packe ich den Code denn hin? Und wie rufe ich dann die Klasse auf?

    mfg



  • Hi!

    Klassen dekleration is ganz einfach:

    class Klassenname // Klassenname ist frei wählbar, class identifiziert die Klasse
    {
    Zugriffsspezifizierung 1: 
      Member 1;
      // ...
    
    Zugriffsspezifizierung 2:
      Member 2:
      // ...
    } Objektname /*Ist optional*/; //";" am Ende beachten!
    

    Member können sowohl Variablen als auch Funktionen (Methoden) sein. Diese unterliegen den übergeordneten Zugriffsrechten davon gibt es drei publib, protected und private.

    Public gibt an das die entsprechenden Klassenmember von überall gesehen werden. Sowohl innerhalb als auch außerhalb der Klasse kann darauf zugegriffen werden.

    Protected schütz Member vor externen Zugriffen. Intern kann weiterhin zugegriffen werden und auch abgeleitete Klassen haben Zugriff auf "protected" Member.

    Private schützt die Member vor jeglichem Zugriff von außerhalb der Klasse. Innerhalb darf natürlich noch Zugegriffen werden. Hier dürfen aber auch keine Abgeleiteten Klassen auf private Member zugreifen.
    Außnamen sind hierbei befreundete Klassen/Methoden. Die dürfen auch auf private Member zugreifen.

    Normal trennst du Dekleration und Definition voneinandern. Idealerweise in sogar verschiedene Dateien.
    Zum obigen Beispiel: Die Methode könntest du in eine Klasse einfügen die du HTTPConnection oder HTTPUtility nennst... Denk dir halt was schönes aus. 😉

    grüße



  • vollkommenegal schrieb:

    estartu schrieb:

    Und: Fällt dir eine sinnvolle Basisklasse ein?

    Nein, ich weiß nicht einmal, was ne Basisklasse ist bzw. wozu ich die brauche. 😞

    Oh, du sagtest doch, du hättest schon Bücher dazu gelesen...

    Okay, eine Basisklasse ist eine Klasse, die schon ziemlich genau das ist, was du willst und die du nur noch erweitern willst.
    Beispiel:
    Klasse Datei:
    m_strDateiname
    DateiOeffnen
    DateiSchließen
    DateiKopieren
    ...
    Klasse TextDatei : public Datei (Datei ist die Basisklasse von TextDatei)
    ZeileLesen
    ZeileSchreiben

    TextDatei hat ja gar kein Öffnen und Schließen, brauchts das nicht? Doch, das braucht es und das hat es - es "erbt" von Datei. Alles was Datei kann (Einschränkungen hat David_pb gezeigt) kann TextDatei auch.
    Soweit klar?

    vollkommenegal schrieb:

    estartu schrieb:

    Ja: Dann ist es eine MFC Klasse und du musst die Basisklasse im Dialog auswählen.
    Nein: Dann ist es eine allgemeine Klasse.

    Sorry, das ist mir zu schnell. Ich versteh kein Wort.

    Mach den Dialog mal auf, dann findest du die Worte wieder. 😉



  • estartu schrieb:

    Oh, du sagtest doch, du hättest schon Bücher dazu gelesen...

    gelesen != verstanden.

    estartu schrieb:

    Mach den Dialog mal auf, dann findest du die Worte wieder.

    Also irgendwie steh ich auf dem Schlauch!? Wenn ich auf File->New->Project... gehe, öffnet sich ein "New Project"-Fenster. Auf der linken Seite stehen dann "Project Types":
    - Visual C++ Projects
    .NET
    ATL
    MFC
    Win32
    General
    - Setup and Deployment Projects
    - Other Projects
    - Visual Studio Projects

    und auf der rechten Seite die entsprechenden Templates, also für MFC bspw.
    - MFC ActiveX Control
    - MFC Application
    - MFC DLL
    - MFC ISAPI Extension DLL

    Unter .NET steht als Template "class libraryy", aber das ist es ja wohl nicht, oder?!? Ansonsten sehe ich nichts, was mit einer Klasse zu tun haben könnte?

    mfg



  • Ach, du hast noch gar kein Projekt... 😮

    Okay, für was für ein Projekt hattest du den Beitrag denn gesucht? Willst du die Klasse gleich da einbauen? Dann hättest du schon eine Testumgebung.

    vollkommenegal schrieb:

    estartu schrieb:

    Oh, du sagtest doch, du hättest schon Bücher dazu gelesen...

    gelesen != verstanden.

    Hast du meine Erklärung jetzt verstanden? Sonst frag.



  • Das mag daran liegen dass die Projektart generell nichts mit Klassen zu tun hat. Jedes C++-Projekt kann (und ich nehme an 99,99% aller C++-Projekte werden) Klassen nutzen. Du brauchst um die Klassen anzuwenden eine Rahmenanwendung (z.B. Konsoleanwendung).

    Aber vielleicht solltest Du Dich wirklich vorher etwas mehr mit Basics beschäftigen, ich sehe Du hast da noch einige Verständnislücken...



  • Hi!

    Wenn du ganz frisch in Sache OOP bist reicht es den grafischen Schnickschnack außenvor zu lassen und in der Konsole zu arbeiten.
    Also: Win32->Konsolenprojekt->Leeres Projekt (oder wie das in der deutschen Version heist).
    Dann kannst du dir beliebig Dateien zum Projekt hinzufügen. Und dann ein paar Beispiele durchgehen.

    grüße



  • Ich bedanke mich bei allen für die Hilfe, aber entweder drücke ich mich so kompliziert aus oder ich bin wirklich zu blöd. 😞

    Ich versuche es noch einmal: ich hab ein Projekt, sagen wir irgendwas dialog-basiertes. Dort gibt es einen Button "Laden". Wenn ich den drücke, soll der von mir gepostete Code ausgeführt werden. (Seine Aufgabe: Text von http://home.pages.at/joachimh/cplusplustest.php einlesen)

    Nun hab ich mir überlegt, dass ja alles OOP sein muss und ich nicht einfach nur den Code in mein Projekt einfügen sollte. Früher hätte ich davon ne Funktion gemacht und die aufgerufen, was aber ja nicht mehr "in" ist.
    Deshalb möchte ich eine Klasse erstellen, um die Methode ggf. später noch einmal nutzen zu können.

    Hier kommen wir nun zu meinen Problemen:

    Wie erstelle ich eine Klasse? (Der Vorgang als solches; welchen Assistenten muss ich starten? Oder erstelle ich einfach ne CPP-Datei mit meinem Text-Editor und schreibe da was rein?)

    Wie erstellt man eine Klasse? D.h.: ich hab ein "Idee" für eine Funktionalität. In diesem Fall stützt sie sich auf eine einzige Methode ("getHtmlSource"), aber vielleicht kann man ja mehr daraus machen!?

    Wenn ich es nun irgendwie geschafft habe, die Klasse zu erstellen: wie benutze ich sie in einem Projekt? Wie binde ich sie ein?

    Ach ja: und dass "Verständnislücken" da sind, weiß ich auch, sonst wäre ich ja nicht hier und würde Euch nerven. 😉

    Ich hoffe, jetzt ist klar, was ich will und wo es hakt?! Wenn nicht, gebe ich es auf und bleib bei meiner prozeduralen PHP-Programmierung. 😃

    mfg


Anmelden zum Antworten