002
27.07.2003, 21:24 Uhr
Pablo
Supertux (Operator)
|
In C und C++ gibt es einfache Variablen, die werte speichern, Referenzen, und Pointers (Zeiger). Ein Pointer ist eine Variable, deren Inhalt eine Adresse von SRAM ist, in anderen Worten, eine Variable, die auf eine bestimmte Stelle des SRAMs zeigt.
In der OOP gibt es Klassen, Strukturen, usw die als Datentypen dienen. Man kann auf die Memebers (Funktionen, Variablen) der Klasse mit einem " . " zugreifen.
Code: |
ClassXYZ obejctXYZ; object.memberVariable=3; object.print();
|
In diesem Fall hat die Klasse ClassXYZ eine Member Variable von Typ int names memberXYZ. print() ist eine Memberfunktion dieser Klasse.
Wenn ich ein Pointer deklariere, dann kann ich . nicht benutzen, sondern muss man -> benutzen.
C++: |
ClassXYZ obj1; // gehen wir davon aus, dass wir schon obj1 initialisert haben. ClassXYZ* pointer_auf_obj1 = &obj1; // Das Zeichen * sagt, es muss ein Pointer sein. // Das Zeichen & sagt, dass man die Adresse des SRAM von obj1 zurückgeben muss // also zeigt jetzt pointer_auf_obj1 auf ob1. pointer_auf_obj1->memberVariable=99; pointer_auf_obj1->print();
|
Wenn du pointer_auf_obj1 veränderst, dann änderen sich auch die gespeicherten Werte von obj1 und umgekehrt.
VC++ hat einige Makros für das Debuggen (Fehlersuche deines Programmes.) assert (nur in DEBUG MODE) tut nicht, wenn die Bedingung, die in Klammern steht, wahr ist. Sollte sie falsch sein, dann erscheint ein MessageBox mit einer Assert Meldung, dass es kein fehler ist, aber an dieser Stelle ist die Bedingung falsch. Das hilft einem beim Programmieren, wenn man während der Laufzeit Werte deiner Variablen überprüfen willst, z.b. wenn du wissen willst, ob die Variable a immer gleich Variable b ist, wenn die Funktion jjj aufgerufen wird. Damm musst du folgendes machen:
Code: |
void fff(int a, int b) { // wenn a != b ist kein Fehler, aber ich will (als Programmier) wissen, wenn es passiert- assert(a==b); }
|
Der Code deiner Frage tut folgendes:
Code: |
test[time][MitarbeiterNr]->mitarbeiter.size() == 4
|
test ist ein 2-dimensionales Array, ich nehme an, dass time und MitarbeiterNr zweit Variablen von typ int sind. Ein Array gilt als Pointer, und dieses Array ist wahrscheinlich ein Array einer Klasse, die ein Object nams mitarbeiter hat, dessen Typ mir unbekannt ist. Weil Array ein Pointer ist, dann muss man -> verwenden, um auf mitarbeiter zuzugreifen. mitarbeiter ist innerhlabt dieser Klasse kein Pointer, deshlab benutzt man . um auf die Funktion size zuzugreifen. == 4 liefert 1 (true) zurück, wenn die Bedingung wahr ist, sonst 0 (false).
Also, wenn test[time][MitarbeiterNr]->mitarbeiter.size() den Wert 4 speichert, dann passiert nichts, sollte dies nicht der Fall sein, dann kommt es eine Meldung, wenn du das Programm ausführst. Das passirt nur in DEBUG Modus, in Realse Modus werden solche Makros nicht kompiliert. -- A! Elbereth Gilthoniel! silivren penna míriel o menel aglar elenath, Gilthoniel, A! Elbereth! Dieser Post wurde am 27.07.2003 um 21:25 Uhr von Pablo Yanez Trujillo editiert. |