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.