Schritt für Schritt: eine Klasse erstellen
-
Hallo zusammen.
Wieso finde ich kein Tutorial, das Schritt für Schritt (an einem Beispiel) erklärt, wie man eine Klasse erstellt?! Gibt es sowas nicht oder bin ich nur zu blöd zum Suchen?
mfg
P.S.: Ich bin kein OOP-Kenner, also je DAU-freundlicher alles erklärt ist, desto besser.
-
Kurzfassung: Was für Funktionen und Variablen braucht die Klasse? Reinpacken -> Fertig.
Ein direktes Buch dazu weiß ich gerade nicht, aber ein Heft. Diese 3 Euro Hefte, da ist eines zu C++ dabei, da wird anhand eines Dackels erklärt, was eine Klasse ist.
Aber am besten lernst du es anhand einer Aufgabe.
-
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
-
http://www.se.fh-heilbronn.de/usefulstuff/VCPLUS6/inhalt.htm
ist Tag 16!
Abgesehen davon findest du in jedem guten C++ Tutorial eine Beschreibung wie man Klassen erstellt und nutzen kann.
Empfehlung von mir Persönlich sind folgende zwei Bücher
http://www.amazon.de/exec/obidos/ASIN/3499600749/qid=1143098766/sr=8-1/ref=sr_8_xs_ap_i1_xgl/302-2674392-2366460
http://www.amazon.de/exec/obidos/ASIN/3499600773/qid=1143098766/sr=8-3/ref=sr_8_xs_ap_i3_xgl/302-2674392-2366460
-
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
ZeileSchreibenTextDatei 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 Projectsund auf der rechten Seite die entsprechenden Templates, also für MFC bspw.
- MFC ActiveX Control
- MFC Application
- MFC DLL
- MFC ISAPI Extension DLLUnter .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