2010-05-24 8 views

Respuesta

19

El primero (punto, .) se utiliza para acceder a los miembros de un objeto, el último (dos puntos, ::) se utiliza para acceder a los miembros de un espacio de nombres o una clase.

Considere la siguiente configuración.

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

En este caso, para referirse a la estructura, que es miembro de un espacio de nombres, se utiliza ::. Para acceder a la variable en un objeto del tipo type, usa ..

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

Entonces, si usamos el objeto para acceder a algo, entonces tenemos que usar el operador punto, y si estamos usando un nombre de clase entonces tenemos que usar ::, ¿correcto ?, ¿puedes dar un ejemplo también, ¡si no te importa! – defiant

+0

@oDx, eso es correcto, así que si tiene una variable estática o función de una clase, usaría "::" con el nombre de la clase para hacer referencia a ellos, mientras que si tiene una función de miembro o una variable de miembro, usaría "." con el nombre de una instancia de la clase. –

1

Si está utilizando un puntero a una instancia de objeto, tendrá que acceder a los miembros del objeto utilizando -> en lugar del "punto"

+1

No * tiene que * - 'p-> m' es simplemente azúcar sintáctica para' (* p) .m';) – fredoverflow

2

Otra forma de pensar en la quad- dot '::' es scope resolution operator. En los casos en que hay más de un objeto en el alcance que tienen el mismo nombre. Se declara explícitamente cuál usar: ''

std::min(item, item2); 

o

mycustom::min(item, item2); 

El operador punto es llamar a los métodos y atributos de una instancia de objeto

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

No se le pidió, pero hay otro operador a utilizar si una instancia de objeto se crea dinámicamente con new, es el operador de flecha '->'

Myobject myobject2 = new Myobject(); 
myobject2->doWork(); 
myobject2->count = 1; 
Cuestiones relacionadas