Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Bedeutung von ->

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
27.07.2003, 20:01 Uhr
~FragenFragen
Gast


Hi!

Fange neu an zu programmieren und komme mit folgendem nicht klar:

(a) Wofür benutzt man -> ?


Bspw:


Code:
KlasseG->test.size():



oder diese Zeile, kann mir die vielleicht jemand übersetzen?


Code:
assert(test[time][MitarbeiterNr]->mitarbeiter.size() == 4);





(b) Wie sucht man in der Hilfe (VC++) nach ->.
Gebe ich es ein, so erhalte ich folgende Meldung: "Die eingegebene Suchzeichenfolge ist ungültig. Geben Sie eine gültige Suchzeichenfolge ein."

Übrigens auch die hier angebotene Suchfunktion hat keine Resultate geliefert.

Danke schon mal!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
27.07.2003, 20:12 Uhr
Oliver
S2-Pixelgeneral


Hallo,

geb mal -> im Index ein, da sollte er's finden.
--
Demokratie ist die Diktatur der Mehrheit.

www.siedler25.org/ ( Siedler2 - Remake )
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
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.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
27.07.2003, 22:24 Uhr
~FragenFragen
Gast


Wow!

@Pablo Yanez Trujillo

Danke für Deine ausführliche und verständliche Erklärung! Du glaubst gar nicht wie sehr Du mir damit weitergeholfen hast.


Zitat:

...sollte dies nicht der Fall sein, dann kommt es eine Meldung, wenn du das Programm ausführst. Das passirt nur in DEBUG Modus,...



Und solch einen Fehler hatte ich auch tatsächlich, jetzt verstehe ich auch die Hintergründe! Ich danke nochmals!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: