was ist in c++ der "->" Operator?
ich hab mir grad' ein bisschen c++ beigebracht und jetzt stoße ich ständig gegen diesen operator (->) wenn ich zum Beispiel mit button1->text="Hallo duda" einen Text zuweisen will.
Nun interressiert mich brennend, was der unterschied zwischen "." (den Punkt nehm' ich immer bei z.B. Variablen aus eigenen Klassen) und diesem Pfeil ist. Auf allen Internetseiten die ich besucht habe und in diesem tollem Tutorial hier hab ich auch nichts brauchbares gefunden. Nur von Wikipedia weiß ich der Pfeil steht für "Zugriff auf Member eines Objekts über einen Zeiger" aber warum geht dann nicht auch button.text =... wenn ich's ohne Zeiger machen will? Ich hoffe es gibt ein paar Delphianer unter euch, die mir diese c++ Frage beantworten können :-D -xy124- |
Re: was ist in c++ der "->" Operator?
der Pfeil ist das gleiche wie ein dereferenzieren und dann mit dem Punkt
also:
Code:
pointer_to_struct->struct_member = (*pointer_to_struct).struct_member;
|
Re: was ist in c++ der "->" Operator?
Zitat:
(*button).text = ... Da man in C und C++ häufig mit Zeigern hantiert, hat man diesen Pfeil als Vereinfachung eingeführt. In Delphi ist es eigentlich auch so kompliziert (Dereferenzierung mit ^), aber der Compiler schummelt etwas und man kommt nahezu immer ohne das Dach aus, jedenfalls im Alltag. |
Re: was ist in c++ der "->" Operator?
also kibt es in c++ von klassen auch zeiger und um den echten Wert hinter dem zeiger zu bekommen nutzt man also diesen ->
...dasnke hat mir sehr geholfen :-D könntet ihr mir auch verraten (wenn das nicht zu kompliziert ist) wie ich jetzt z.B. von dieser Klasse:
Code:
einen Zeiger erstelle?
class hund {
private: int age; public: hund(){ //= create cout<<"Hund wird gebaut"<<endl; } int lieb; void setage(int newage) { age=newage; } int getage() { return age; } void foo(hund dummy) //destroyer, braucht als parameter einen hund, der griegt den namen dummy { dummy.setage(-1); //geiles Alter nicht } }; müsste das nicht so gehen? :
Code:
hund bello;
hund* derzeigerhund; derzeiger=&bello; derzeigerhund->lieb=3; cout<<endl<<bello.lieb; system("PAUSE"); |
Re: was ist in c++ der "->" Operator?
eine klassen variable ist imho ein typisierter zeiger der auf ein objekt zeigt (sofern erstellt). in delphi ist also folgendes ein zeiger:
Delphi-Quellcode:
meine zeh++ kenntnisse sind zwar eingerostet, aber soweit ich noch weiß ist es dort genauso
var
miep: TObject; |
Re: was ist in c++ der "->" Operator?
Du kannst dem KLassenzeiger eine Referenz zuweisen, ja, aber das ist sehr unüblich. Die klassische Verwendung sieht so aus:
Code:
hund* derzeigerhund = new hund;
//... delete hund; |
Re: was ist in c++ der "->" Operator?
ok danke hat mir sehr geholfen :thumb:
aber nochmal was anderes der new-operator geht der auch, wenn man von einer eigenen klasse instanzen zur Laufzeit erstellen will? das hier
Code:
funktionier jeden falls nicht :(
wauwau = new hund();
wie mach ich das dann? hoffe ihr könnt mir helfen -xy124- |
Re: was ist in c++ der "->" Operator?
Zitat:
folgendes funktioniert bei mir ohne probleme
Code:
TForm1* myform = new TForm1(0);
|
Re: was ist in c++ der "->" Operator?
na alles zusammen sieht in etwa so aus:
Code:
Edit der compiler lässt mich garnicht erst starten, er sagt immer:
class hund {
private: int age; public: hund(){ //= create cout<<"Hund wird gebaut"<<endl; } int lieb; void setage(int newage) { age=newage; } int getage() { return age; } void foo(hund dummy) //destroyer, braucht als parameter einen hund, der griegt den namen dummy { dummy.setage(-1); //geiles Alter nicht } }; int main() { wauwau = new Hund(); } Zitat:
|
Re: was ist in c++ der "->" Operator?
Code:
Nachtrag: wuerde uebrigens immer direkte Pointer vermeiden, wenn es geht. Dafuer gibt es Container auf dem Stack ala boost::scoped_ptr ...
hund* wauwau = new hund();
Nachtrag #2: Uebrigens benutzt boost::scoped_ptr auch einen ueberladenen operator->() und man kann damit putzige Sachen anstellen. Ich habe beispielsweise mal eine Wrapper-Templateklasse geschrieben die sich quasi um eine existierende (Legacy-)Klasse - welche immer mit Instanzpointern statt auf dem Stack benutzt wurde - herumlegte und bestimmte unsichere Dinge einfach verbot, andere aber ohne weiteres zuliess. Wie heisst es so schoen, wenn man ein Problem loesen will, erhoehe man einfach das Abstraktionslevel :) |
Re: was ist in c++ der "->" Operator?
Zitat:
Auch all die Dinge, die man aufgrund der Operatorüberladung mit Iteratoren anstellen kann, seien hiermit zusammenfassend erwähnt ;) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:00 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz