Programación de aprendizaje: ¿Cuál es la diferencia entre el operador punto (.) Y -> en C ++? [duplicar]?


Respuesta 1:

El operador de puntos proporciona acceso a un miembro de objeto donde el operando izquierdo es un nombre de objeto o una referencia a un objeto. El operador de flecha proporciona acceso al miembro de un objeto señalado por el operando izquierdo (que es un puntero simple).

Además, el operador de flecha puede estar sobrecargado; entonces, si el operando izquierdo no es un puntero simple sino un objeto, el operador puede tener un significado diferente. Aún así, el resultado debe ser un puntero simple o una referencia a un objeto existente (que también tiene definido el operador de acceso). Sintácticamente, el operando correcto debe ser un miembro (un identificador de un miembro existente) de ese objeto.

Un buen ejemplo de sobrecarga significativa del operador de flecha son los punteros inteligentes. Estas son clases que se ajustan a un puntero simple, agregando más funcionalidad (propiedad única del objeto dinámico o recuento de referencias). Los punteros inteligentes tienen el operador de flecha sobrecargado, por lo que puede usarlo para acceder al objeto subyacente tal como lo haría en el caso de un puntero simple a ese objeto.


Respuesta 2:

Te diré en palabras simples ...

Para acceder a los miembros de una estructura, use el operador de punto, y

Para acceder a los miembros de una estructura a través de un puntero, use el operador de flecha.

Por ejemplo, considere la siguiente estructura ………

estudiante de estructura {
  int regNo;
  nombre del personaje [25];
} std;

Para asignar el valor "suhail" al miembro miembro del objeto estándar, debe escribir algo de la siguiente manera ...

strcpy (nombre estándar, "suhail");

Si ptr_std es un puntero a un objeto de tipo estudiante, entonces asignando el valor "suhail" al nombre miembro del objeto std, debe escribir así ...

strcpy (ptr_std-> nombre, "suhail");

Respuesta 3:

El operador de puntero es lo que se conoce como azúcar sintáctico: algo que no es realmente necesario pero hace que el programa sea más fácil de escribir y leer. La declaración

p-> campo

es idéntico a

(* p) .field

si p es en realidad un puntero Si es un objeto, entonces el compilador invocará el operador -> () método en el objeto en su lugar.