2010-05-24 28 views

Odpowiedz

19

Ta pierwsza (kropka, .) służy do uzyskiwania dostępu do elementów obiektu, druga (dwukropek, ::) jest używana do uzyskiwania dostępu do członków przestrzeni nazw lub klas.

Rozważ poniższe ustawienia.

namespace ns { 
    struct type 
    { 
     int var; 
    }; 
} 

W tym przypadku, w odniesieniu do struktury, która jest członkiem nazw, należy użyć ::. Aby uzyskać dostęp do zmiennej w obiekcie typu type, należy użyć ..

ns::type obj; 
obj.var = 1; 
+0

więc, jeśli używamy obiektu, aby uzyskać dostęp do czegoś, to musimy użyć operatora kropki, a jeśli używamy nazwy klasy, to musimy użyć ::, prawda ?, czy możesz podać przykład również, Jeśli nie masz nic przeciwko! – defiant

+0

@oDx, to jest poprawne, więc jeśli masz zmienną statyczną lub funkcję klasy, użyjesz "::" z nazwą klasy do odniesienia się do nich, natomiast jeśli masz funkcję członka lub zmienną członka, możesz użyłby "." z nazwą instancji klasy. –

1

Jeśli używasz wskaźnik do instancji obiektu, będziesz miał dostęp do członków obiektu za pomocą -> w miejscu „kropką”

+1

Nie musisz * musieć * - 'p-> m' jest po prostu syntaktycznym cukrem dla' (* p) .m';) – fredoverflow

2

Innym sposobem, aby myśleć o Quad kropka "::" to scope resolution operator. W przypadkach, gdy istnieje więcej niż jeden obiekt w zakresie, które mają tę samą nazwę. Jawnie zadeklarować, który z nich korzystać: ''

std::min(item, item2); 

lub

mycustom::min(item, item2); 

operatora kropka jest wywołanie metody i atrybuty instancji obiektu

Myobject myobject; 
myobject.doWork(); 
myobject.count = 0; 
// etc 

Nie pytano, ale jest inny operator w użyciu, jeśli instancja obiektu jest tworzony dynamicznie new, to operator strzałka „->”

Powiązane problemy