Unterschied zwischen einem Objekt und einer Klasse??
-
Hallo,
ich bin neu sowohl hier als auch in der Objektorientierten ProgrammspracheAlso, bitte verzeiht mir diese dämliche Frage
Aber was ist der Unterschied zwischen einem Objekt und einer Klasse??
In der UML wird ja ein Objekt und eine Klasse durch ein Rechteck repräsentiert. Das weist ja schonmal darauf hin dass es da nicht viele unterschiede gibt.
Unterschied in UML: Objekt --> Name unterstrichen, Klasse --> NICHT unterstrichenWo liegt jetzt der Unterschied im C++
danke
gruß mercer
-
OK, hier etwas OOP-Grundlage für dich:
Eine Klasse ist eine allgemeine Beschreibung eines Datentyps (z.B. "Auto" oder "Mensch") mit allen wichtigen Funktionalitäten (Methoden, Membervariablen etc).
Ein Objekt ist ein konkreter Gegenstand, der einer bestimmten Klasse angehört (z.B. "mein Skoda" oder "mercer") - wie das Objekt prinzipiell aufgebaut ist und was es kann, bestimmt seine Klasse, aber anhand seiner Elemente (z.B. Farbe, Kennzeichen oder Hubraum) ist jedes Objekt "besonders".
-
Ok,
Ein Objekt ist demnach einfach ein Teil einer Klasse???
Kann eine Klasse auch mehrere Objekte Beinhalten???
gruß mercer
-
mercer schrieb:
Ein Objekt ist demnach einfach ein Teil einer Klasse???
Nein, ein Objekt ist die Konkretisierung einer Klasse. "Du" bist das Objekt, "Mensch" ist die Klasse. Du bist kein Teil von Mensch.
Kann eine Klasse auch mehrere Objekte Beinhalten???
Ein Objekt kann andere Objekte beinhalten, wenn auch nicht von derselben Klasse. Welche anderen Objekt ein Objekt beinhaltet, ist durch die Klasse festgelegt.
-
Was ich fast vergessen hab:
Danke CStoll
Und noch ne weitere Frage:
Kennt jemand gute eBooks für mich, mit denen man die OOP lernen kann??
gruß
-
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.