Unterschied zwischen einem Objekt und einer Klasse??
-
Ist Objekt ein anderes Wort für Instanz?
-
estartu schrieb:
Ist Objekt ein anderes Wort für Instanz?
Genau
-
Ah jetzt ja...
-
Klasse verhält sich zu Objekt, wie Typ zu Variable.
-
MFK schrieb:
Ein Objekt kann andere Objekte beinhalten, wenn auch nicht von derselben Klasse.
warum nicht von derselben klasse? vielleicht nicht in c++ aber in der theorie doch schon, oder?
zum thema: ich kenn' so'n typ der gibt java-kurse für einsteiger, der sagt immer zu seinen schülern: "eine klasse ist ein 'bauplan' für objekte"
-
Wenn wir schonmal so schön dabei sind
Was sind Attribute und was sind Methoden
gruß mercer
PS: wäre nett wenn mir jemand nen gutes eBook oder nen guten Link empfehlen könnte mit dessen hilfe ich mir die OOP etwas besser aneignen kann
Danke
-
mercer schrieb:
Was sind Attribute und was sind Methoden
Attribut = Membervariable
Methode = MemberfunktionPS: wäre nett wenn mir jemand nen gutes eBook oder nen guten Link empfehlen könnte mit dessen hilfe ich mir die OOP etwas besser aneignen kann
Hast du schon da geguckt? http://www.c-plusplus.net/cms/modules.php?op=modload&name=Downloads&file=index
-
Danke erstmal
[quote="estartu"]
Attribut = Membervariable
Methode = Memberfunktion
[quote]Membervariable: sind das die Variablen der Klasse ???
Kann mir jemand die funktion der Memberfunktion etwas genauer erklären???
gruß
-
mercer schrieb:
Membervariable: sind das die Variablen der Klasse ???
Ja.
Kann mir jemand die funktion der Memberfunktion etwas genauer erklären???
Um es mit deinen Worten zu sagen: Das sind die Funktionen der Klasse.
-
Klasse, Danke
vlg
mercer
-
Um beim Bsp 'Mensch' zu bleiben, hier wäre es vieleicht sinnvoll für diese Klasse eine MemberFunktion 'Gehen' einzubauen. Für Dich als Objekt hieße das dann als QuellText:
Mensch mercer; // Mensch erzeugen *hüstl* mercer.Gehen(); // :D
Ist halt immer so eine Sache mit solchen Beispielen
Und ja, MemberVariablen sind Variablen, i.d.R. sogar private Variablen, der Klasse.
-
Klassen sind nichts anderes als "Baupläne" für Objekte / Instanzen. Das Objekt "SuperHero" ist eine Variable vom Typ "krieger", "Hans" ein Objekt vom Typ "Mensch". Die Klasse ist abstrakt, das Objekt konkret (Adresse des Objekts: this-Zeiger im realen bzw. virtuellen Speicherraum).
Klassen enthalten Member-Funktionen (Methoden) und Member-Variablen (Attribute).
Der "Bau" der Objekte erfolgt in der Konstruktor-Funktion (kurz. Konstruktor).
Der Konstruktor hat den gleichen Namen wie die Klasse.Der Zugriff auf Funktionen und Variablen wird bei deren Deklaration erledigt:
public, protected oder private.Bei private kann nur von innerhalb der Klasse zugegriffen werden.
Bei public kann man auch von außen auf die Daten der Klasse zugreifen.
Bei protected können abgeleitete Klassen von außen zugreifen.Der Destruktor ist die "Abrissbirne".
Damit das nicht so trocken 'rüber kommt, ein kleines Konsolen-Beispiel:
#include <iostream> #include <string> using namespace std; void wait() { std::cin.clear(); std::streambuf* pbuf = std::cin.rdbuf(); std::streamsize size = pbuf->in_avail(); std::cin.ignore(size); std::cin.get(); } class krieger { private: static int count_; string name_; int gesundheit_; int kraft_; int ruestung_; void holeAdresse() const; public: krieger(); ~krieger(); //get-Methoden inline string getName() const {return name_;} int getGesundheit() const {return gesundheit_;} int getKraft() const {return kraft_;} int getRuestung() const {return ruestung_;} //set-Methoden inline void setName(string name) {name_ = name;} void setGesundheit(int val) {gesundheit_ = val;} void setKraft(int val) {kraft_ = val;} void setRuestung(int val) {ruestung_ = val;} void angreifen( krieger& gegner ); }; int krieger::count_ = 0x40; krieger::krieger() { cout << "ctor von: "; holeAdresse(); name_ = ++count_; gesundheit_ = 100; ruestung_ = 30; kraft_ = 10; } krieger::~krieger() { cout << "dtor von: "; holeAdresse(); } void krieger::angreifen( krieger& gegner ) { cout << "Krieger " << name_ << " greift Krieger " << gegner.name_ << " an.\n"; gesundheit_-=5; gegner.gesundheit_-= int( 3*kraft_ - 2*gegner.kraft_ - 0.1*gegner.ruestung_ ); } void krieger::holeAdresse() const { cout << this << '\n'; } int main() { int n; cout << "Wieviele Krieger? "; cin >> n; krieger* k = new krieger[n]; for(int i=0; i<(n-1); ++i) { cout << endl; k[i].angreifen(k[i+1]); for(int j=0; j<(n); ++j) cout << k[j].getName() << ": Gesundheit: " << k[j].getGesundheit() << "%\n"; } cout << endl; delete[] k; wait(); wait(); }
#include <iostream> #include <vector> //STL using namespace std; void wait() { std::cin.clear(); std::streambuf* pbuf = std::cin.rdbuf(); std::streamsize size = pbuf->in_avail(); std::cin.ignore(size); std::cin.get(); } class Lampe { private: int helligkeit_; public: Lampe() : helligkeit_(0){} void dimmen(int wert) { helligkeit_ = wert; } bool getEin() const {return getHelligkeit();} int getHelligkeit() const {return helligkeit_;} }; class Schalter { private: bool ein_; public: Schalter() : ein_(false){} void schalten() { ein_ = !ein_; } bool getEin() const {return ein_;} }; class Beleuchtung { private: vector<Schalter> v_; Lampe l_; public: Beleuchtung( vector<Schalter> v, Lampe l ) : v_(v),l_(l){} void schalten(int i) { v_[i].schalten(); if( ( v_[0].getEin() && v_[1].getEin() && v_[2].getEin() ) || ( v_[0].getEin() && !v_[1].getEin() && !v_[2].getEin() ) || ( !v_[0].getEin() && v_[1].getEin() && !v_[2].getEin() ) || ( !v_[0].getEin() && !v_[1].getEin() && v_[2].getEin() ) ) l_.dimmen(100); else l_.dimmen(0); } void status() const { cout << "S1: " << (v_[0].getEin()?"an ":"aus") << " " << "S2: " << (v_[1].getEin()?"gerade ":"gekreuzt") << " " << "S3: " << (v_[2].getEin()?"an ":"aus") << " " << "Lampe: " << (l_.getEin()?"an ":"aus") << " " << "Helligkeit: " << l_.getHelligkeit() << endl; } }; int main() { Lampe l1; Schalter s1,s2,s3; vector<Schalter> v; v.push_back(s1); v.push_back(s2); v.push_back(s3); Beleuchtung b1(v,l1); for(int i=0; i<3; ++i) { b1.schalten(0); b1.status(); b1.schalten(1); b1.status(); b1.schalten(2); b1.status(); } wait(); wait(); }
Hier siehst Du, wie aus abstrakten Konzepten konkrete Objekte werden. Man versucht mit OOP reale "Objekte" nachzubilden. In der MFC findest Du eine ganze Klassenhierarchie, die "nur auf dem Bildschirm lebende" Objekte aus der Windows-Welt nachbilden (Fenster, Buttons, Listen, Dialoge, Scrollbalken, ...)
Hier Links zu zwei sehr guten C++-Tutorials:
http://www.cpp-tutor.de
http://www.volkard.de/vcppkold/klassen.html
-
SCHLUCK,
naja, bis ich so'n Prog hinbekommen dauerts wohl noch
Danke für die zahlreichen Beispiele.
Und Danke für den Link, werd die so schnell wie möglich durchgehen!gruß mercer
PS:
Ich bin ein VB/VBA-HobbyProgger, möchte aber auf cpp umsteigen.
Vielleicht hat ja jemand nen Tipp wie ich das am besten anstelle
Danke!
-
Ich war vorher VBA mit Excel progger und bin auch auf cpp umgestiegen. Mir ging das sehr leicht mit folgendem Buch:
Microsoft Visual C++ Schritt für Schritt
Ist von Chuck Sphar und von der Microsoft Press.Da lernst du zuerst Grundlagen zu C++ und dann auch noch etwas von der MFC. Am Ende, wenn das Buch durch hast, hast du eine Art von Paint selber geproggt
Im Buch ist im übrigen noch eine Autorenversion von Visual Studio 2003 dabei.Bzw. allgemein empfiehlt es sich halt ein paar Tutorials zu machen. Gibt nichts schlimmeres als wenn man sich einfach an das Proggen macht, meiner Meinung nach ist das viel zu frustrierend und viel zu gefährlich ^^
Grüssli
-
Heißt das "Paint" zufällig Scribble?
Wenn das Buch dann noch auf Deutsch ist, muss ich mir das holen. Ich habe das nämlich mal auf Englisch (gibts in der MSDN kostenlos) durchgearbeitet, das ist genial.
-
Ne das Teil heisst dann MyDraw. Und es ist auf Deutsch, ich empfehle doch in einem Deutschen C++ Forum kein englisches Buch
Grüssli
-
Schade, wenn das nicht Scribble ist, dann isses nicht mehr sooo interessant.
-
Aber es ist gut! Für dich vielleicht nicht interessant, da du schon alles weisst und kennst und nur nach einem Buch für deine Kindheitsträume suchst *lol* ... Aber sag mal, wie hiess das Buch denn in Englisch? Kann man doch sicher eine deutsche Übersetzung in Google finden. Sicherlich auch zum kaufen, bzw. offiziell übersetzt.
Grüssli
-
Hey, ich weiß auch nicht alles, gerade mit CDC und den Drumherum stehe ich sehr auf Kriegsfuß.
Deswegen ja die kurzzeitige Begeisterung. Wenn es mir günstig über den Weg läuft, kommt es sicherlich trotzdem in die Sammlung.Das ist kein Buch, was ich meinte. Das ist in der MSDN: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vctutor98/HTML/_gs_scribble_tutorial_steps.asp
-
Ich glaub ich wiederhol mich
Aber nochmal...
Klasse Danke
gruß mercer