Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Inatrox

Frischling

  • »Inatrox« ist der Autor dieses Themas

Beiträge: 61

Wohnort: Dresden

  • Private Nachricht senden

1

21.04.2016, 16:36

Unterschied zwischen Zugriffsoperatoren . und :

Hey Leute,

ich bin gerade bei dem Buch C++ Für Spieleprogrammierer bei dem Teil mit den Singeltons angekommen. Nun verwendet er bei dem dort gezeigten Beispiel diese Zeile: CLogfile::Getränke () -> Statusmeldung (). Meine Frage nun, warum muss man hier die Doppelpunkte verwenden und kann nicht mit dem normalen Punktoperator auf die Funktion zugreifen. Was ist der Unterschied zwischen den beiden Zugriffsoperatoren?

MfG Inatrox
cout << "Programmieren muss sein" << endl;

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

2

21.04.2016, 16:52

Das ist zu einem grossen Teil Konvention, wenn du auf einen Namen in einer Klasse zugreifen willst. Im allgemeinen wird der Operator benutzt um Namensbereiche aufzulösen. Den gleichen Operator siehst du wenn du auf Namen innerhalb eines Namensraumes (namespace) zugreifen willst. Weiss allerdings nicht ob du bereits soweit bist in dem Buch.

Der Punktoperator ist vor allem in Benutzung mit Objekten (nicht Klasesn oder Namen) verknüpft.

Theoretisch könnte das alles auch der Punktoperator machen (wie z.B. in Java). Vielleicht gäbe es dann aber andere Herausforderungen für die Compiler.

Der Unterschied wird glaube ich am besten klar mit einn paar Beispielen. Gibt es eine konkrete Stelle, die dich verwirrt?

Falls du Englisch kannst gäbe es hier eine Diskussion dazu. Das ganze ist allerdings relativ komplex, wenn du die komplette Antwort wissen wolltest (dann wäre ein Blick in den Standard, Stichwort "scope resolution" wohl am besten). Bringt dir aber imo nicht viel.

Das einfachste Beispiel um den Unterschied zu zeigen:

C-/C++-Quelltext

1
2
3
4
5
6
7
Class A {
  void foo(){}
};

A a;
a.foo(); // links eine Variable
A::foo(); // links eine Klasse

Faustregel: Bei Punkt (oder "->") wird erwartet dass links eine Variable ist und bei "::" wird erwartet das links ein Namensraum (eine Klasse oder namespace) steht. Warum das genau so ist weiss ich auch nicht und man kann wegen dem dafür ganz lustige Sachen machen, die aber nicht relevant sind für dich. ^^

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »drakon« (21.04.2016, 17:00)


Inatrox

Frischling

  • »Inatrox« ist der Autor dieses Themas

Beiträge: 61

Wohnort: Dresden

  • Private Nachricht senden

3

21.04.2016, 17:18

Vielen Dank. Ich hab den Unterschied jetzt verstanden ^^
cout << "Programmieren muss sein" << endl;

4

21.04.2016, 18:11

man kann wegen dem dafür ganz lustige Sachen machen

:o Das interessiert micht jetzt.

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

5

21.04.2016, 18:48

man kann wegen dem dafür ganz lustige Sachen machen

:o Das interessiert micht jetzt.

Am besten den verlinkten Thread lesen. Da gibts ein paar Sachen. Wird auch mehr erklärt. Da ist sogar eine Erklärung zum "Wieso" von Stroustrup drin.

Werbeanzeige