Wofür sind die Strukturen?
-
Also ja hier ist ein Beispiel aus einem Buch!
// Arbeitsbereich: Klasse1 // Programmname: Struct.cpp #include <iostream.h> struct farm_house { int pig_values; }; int main() { farm_house pig1, pig2, pig3; pig1.pig_values = 12; pig2.pig_values = 13; pig3.pig_values = 14; cout << "Der Wert von pig1 lautet: " << pig1.pig_values<< "\n"; cout << "Der Wert von pig2 lautet: " << pig2.pig_values << "\n"; cout << "Der Wert von pig3 lautet: " << pig3.pig_values << "\n"; return 0; }
Ich versteh nicht was das jetzt gebracht hat!
-
Erweiter doch mal die Struktur.
struct farm_house { int pig_values; int horse_values; int cow_values; };
So könntest du für mehrere Farm-Häuser mehrere Tierwerte speichern. Dein Beispiel mit nur einem Attribut (pig_values) macht wirklich keinen Sinn - richtig erkannt.
farm_house farm1, farm2, farm3; // pigs machen keinen Sinn! farm1.pig_values = 12; farm1.horse_values = 4; farm1.cow_values = 10; farm2.pig_values = 13; farm2.horse_values = 2; farm2.cow_values = 20; farm3.pig_values = 14; // usw.
Ich würde mal sagen, dein Buch ist Mist! Schmeiss es weg! Wenn selbst die einfachsten Dinge darin falsch vermittelt werden, wirds bei komplexeren Sachen bestimmt katastrophal.
-
Steige lieber mal über die UML abstrakter in OOP ein:
http://ki.cs.tu-berlin.de/~cove/uml/Table of Contents.htm#TopOfPage
http://www.sigs-datacom.de/sd/publications/os/1998/02/OBJEKTspektrum_UM_kompakt.htmUML kennt 5 vordefinierte Relationen (Beziehungen):
Assoziation, Aggregation, Komposition, Generalisierung, Refinement.Beispiel:
Ein Auto hat ein Lenkrad (1-Komposition), einen Koffer im Kofferraum (0..1-Aggregation, kann ja kein Koffer da sein und der Koffer lebt auch ohne Auto weiter) und 4 Räder (4-Komposition), aber n-Insassen (n <= 5, n-Aggregation), was sich so abbildet:class Auto { private: Lenkrad m_lenkrad; Koffer* m_pKoffer; // NULL bei 0, Zeiger bei einem Koffer Rad m_Rad[4]; // Anzahl fest, Komposition => normales Array std::vector<Person*> m_Insassen; // Anzahl dynamisch, Objekte leben weiter (Aggregation) };
Liste von Marc++us:
Aggregation, 1 Element Referenz auf Objektinstanz
Aggregation, 0..1 Elemente Zeiger auf Objektinstanz, NULL zeigt 0 an
Aggregation, n Elemente Array aus Zeigern auf Objektinstanzen
Aggregation, 0..* Elemente dyn. Array (vector<T*>, list<T*>) aus Zeigern auf Objektinstanzen
Komposition, 1 Element Objektinstanz
Komposition, 0..1 Elemente Zeiger auf Objektinstanz, NULL zeigt 0 an
Komposition, n Elemente Array aus Objektinstanzen
Komposition, 0..* Elemente dyn. Array (vector<T>, list<T>) aus ObjektinstanzenAnmerkung:
Listen sind stark darin, an beliebigen Stellen Elemente einzufügen und zu entfernen, dafür kannst du sie nur sequentiell durchlaufen (also nicht bspw. direkt auf das 10. Element zugreifen).
Vektoren dagegen haben diesen Random-Access, dafür ist das Einfügen und Entfernen in der Mitte oder am Anfang extrem ineffizient (am Ende Einfügen (push_back) ist OK).
-
Also irgendwie hab ich jetzt da immer noch nicht durchgeblickt!
-
Ich kann diese Seite immer wieder empfehlen. Ist zwar C, aber Strukturen
werden gut erklärt:
http://www.pronix.de/C/standard_C/c_programmierung_18.shtml
-
Bolero Tiger hat auch Dinge angesprochen, die mit diesem Topic nichts zu tun haben. Weiß garnicht was das soll?
@Etyx! Strukturen sind sozusagen Datensammlungen, du kannst damit sozusagen Variablen gruppieren um etwas zu beschreiben. Z.B. eine Farm beschreiben oder eine Adresse einer Person:
struct Adresse { string vorname; string nachname; string strasse; int hausnr; int plz; string ort; };
Damit könntest du also gut eine Adressdatenbank erstellen - mal ganz platt gesagt.
Das geht in dem du "Adresse" mehrfach instanzierst, also pro Person eine "Adresse", und dann entsprechend pro Adresse die Attribute (vorname, nachname usw.) füllst und später natürlich auslesen.
Es ist eigentlich ganz banal... was Bolero Tiger gesagt hat, verfehlt deine Frage um Längen - das würde ich einfach nicht beachten! Später wirst du zwar auch darauf mal treffen, aber wenn du Structs nicht verstanden hast, ist das von Bolero noch verwirrender.