Unterschied dieser Zeichen . -> ::
-
Hallo, oft sehe ich in Quellcodes diese Zeichen:
eineKlasse::eineMethode();
eineKlasse.eineMethode();
eineKlasse->eineMethode();Was ist der Unterschied zwischen diesen drei Versionen? Wann muss man :: wann -> und wann . benutzen? Würde mich über Aufklärung freuen!

Tschüss!
-
eineKlasse::eineMethode(); = Aufruf einer Statische Methode der Klasse
eineKlasse.eineMethode(); = Aufruf einer Methode durch das Objekt
eineKlasse->eineMethode(); = Aufruf einer nicht statischen Methode durch ein Zeiger auf die KlasseeineKlasse->eineMethode(); = (ist das selbe wie) (*eineKlasse).eineMethode();
-
Firefighter schrieb:
eineKlasse::eineMethode();
Oder aber auch Aufruf der "Basisversion" einer Funktion, also im Falle das man sie beim abgeleiteten Typen übschrieben hat. Verständlich ausgedrückt, oder?

-
Geil wie Sau Fellhuhn
Nee, aber das wäre auch eine Möglichkeit.
-
Firefighter schrieb:
eineKlasse::eineMethode(); = Aufruf einer Statische Methode der Klasse
Muss nicht sein. Kann auch die Konstruktion eines Objektes sein.
Firefighter schrieb:
eineKlasse->eineMethode(); = Aufruf einer nicht statischen Methode durch ein Zeiger auf die Klasse
Muss auch nicht sein. -> Kann beliebig überladen werden. Das heisst eineKlasse muss kein Zeiger auf ein Objekt sein, um den -> benutzen zu können. (Smartpointer).
Firefighter schrieb:
eineKlasse->eineMethode(); = (ist das selbe wie) (*eineKlasse).eineMethode();
Muss auch nicht sein. Da -> und . verschieden überladen sein können, kann das komplett was anderes bedeuten. Selbst wenn * und -> den gleichen Rückgabewert haben, kann die Unterschiedliche benutzung von -> und . etwas anderes Bedeuten.
-
Fellhuhn schrieb:
Firefighter schrieb:
eineKlasse::eineMethode();
Oder aber auch Aufruf der "Basisversion" einer Funktion, also im Falle das man sie beim abgeleiteten Typen uebschrieben hat. Verstaendlich ausgedrueckt, oder?

oder bei Zugriff auf Objekte innerhalb eines anderen Namespaces
namespace sp { void foo(); } sp::foo();uebrigens gelten alle drei nicht nur fuer Methoden einer Klasse, sondern auch fuer deren oeffentliche Membervariablen
class myClass { public: int i; } myClass* a = new MyClass(); myClass b; std::cout << a->i << std::endl; std::cout << b.i << std::endl;
-
Hier stand Blödsinn...

-
Ok dann habe ich da wohl ein paar vergessen, aber ich schätze mal der Threadersteller wollte nur die Grundlegenden unterschiede und nicht alle anderen Möglichkeiten. Kann mich aber auch irren.
-
Tachyon schrieb:
Hier stand blödsinn...

Hier steht Blödsinn.

SCNR
-
Danke für die Beteiligung, ich verstehe leider immer noch nicht Folgendes:
// eineKlasse::eineMethode(); = Aufruf einer Statische Methode der Klasse
K :: M();
M ist die statische Methode der Klasse K. K ist eine Klasse und kein instanziiertes Objekt.// eineKlasse.eineMethode(); = Aufruf einer Methode durch das Objekt
I . M();
I ist die Instanz einer Klasse und M eine Methode dieser Klasse.// eineKlasse->eineMethode(); = Aufruf einer nicht statischen Methode durch ein Zeiger auf die Klasse
K -> M();
Ich dachte eine nicht-statische Methode kann nur aufgerufen werden, wenn vorher eine Instanz (Objekt) der Klasse erzeugt wurde??? Kann das jemand kurz erläutern?Tschüss
-
mikser schrieb:
// eineKlasse->eineMethode(); = Aufruf einer nicht statischen Methode durch ein Zeiger auf die Klasse
K -> M();
Ich dachte eine nicht-statische Methode kann nur aufgerufen werden, wenn vorher eine Instanz (Objekt) der Klasse erzeugt wurde??? Kann das jemand kurz erläutern?Fügen wir mal die zwei Worte "Instanz einer" hinzu...:
Aufruf einer nicht-statischen Methode durch einen Zeiger auf die Instanz einer Klasse.
Vielleicht ist es nun besser verständlich.