Operador de flecha vs. Operador de puntos en C++

Shikha Chaudhary 12 octubre 2023
  1. el operador punto (.) en C++
  2. el operador de flecha (->) en C++
  3. Operador de flecha vs. Operador de puntos en C++
  4. Conclusión
Operador de flecha vs. Operador de puntos en C++

Para acceder a los miembros de la clase en C++, usamos los operadores de punto y flecha. Pero esto no significa que ambos sean iguales.

Hay algunas diferencias entre estos dos operadores, que veremos en este artículo. A lo largo de este artículo, los tipos de clase, unión y estructura se tratan como tipo de clase.

Para comprender en qué se diferencia el operador de punto del operador de flecha, primero veamos los conceptos básicos de estos dos operadores.

el operador punto (.) en C++

También conocido como operador de acceso a miembros de clase, el operador de punto (.) en C++ ayuda a acceder a los miembros públicos de cualquier clase determinada. Aquí, los miembros públicos no son más que las variables y métodos de una clase.

Sintaxis:

name_of_object.name_of_member;

Veamos un ejemplo y veamos cómo funciona el operador punto.

En el siguiente ejemplo, la clase desserts tiene un miembro de datos privados, cakes, y dos funciones de miembros públicos, init() y display() junto con un miembro de datos públicos, chocolates.

Ahora, podemos usar el operador punto para acceder a ciertas variables y funciones y asignar valores a una variable. Tenga en cuenta que dentro de la función main(), usamos el operador punto en los siguientes lugares:

  1. Para asignar el valor 100 al miembro de datos privados, cakes a través de la función de miembro público, init().
  2. Asignar el valor 200 al miembro de datos públicos, chocolates.
  3. Para acceder a la función miembro pública, display().

Código de ejemplo:

#include <iostream>
using namespace std;

class desserts {
 private:
  int cakes;

 public:
  int chocolates;
  void init(int cakes) { this->cakes = cakes; }
  void display() { cout << "Number of cakes: " << cakes << endl; }
};

int main() {
  // object declaration
  desserts q;
  // assign the values
  q.init(100);
  q.chocolates = 200;

  // print the values
  q.display();
  cout << "Number of chocolates: " << q.chocolates << endl;

  return 0;
}

Producción :

Number of cakes: 100
Number of chocolates: 200

Así es como usamos el operador punto en C++. Ahora, veamos cómo funciona el operador de flecha.

el operador de flecha (->) en C++

Para acceder a los elementos de una estructura o unión, usamos el operador de flecha (->) en C++. El operador de flecha utiliza una variable de puntero que apunta a una estructura o unión.

Sintaxis:

(name_of_pointer)->(name_of_variable)

Veamos un ejemplo y veamos cómo funciona el operador de flecha. Recuerda que funciona tanto con estructura como con unión.

En este ejemplo, estamos usando el operador de flecha en una estructura. Aquí, la estructura postres tiene dos miembros, sabor y número.

Esta estructura tiene un objeto llamado ítems. Luego, dentro del bloque principal, usamos el operador flecha para asignar el valor 2 a la variable número.

Además, usamos el operador de flecha para acceder e imprimir el valor de la variable número. Básicamente, así es como funciona un operador de flecha con una estructura.

Código de ejemplo:

#include <iostream>
using namespace std;

struct desserts {
  char flavor[50];
  int number;
};

// Create the object of the structure
struct desserts* item = NULL;

int main() {
  item = (struct desserts*)malloc(sizeof(struct desserts));

  // use arrow operator to assign value
  item->number = 2;

  cout << "The number of items: " << item->number;

  return 0;
}

Producción :

The number of items: 2

Veamos otro ejemplo donde se usa el operador de flecha en una unión. Aquí, la unión postres tiene dos miembros, sabor y número.

Esta unión tiene un objeto llamado ítems. Luego, dentro del bloque principal, usamos el operador de flecha para asignar un valor a la variable número.

Además, usamos el operador de flecha para acceder e imprimir el valor de la variable número. Tenga en cuenta que el operador de flecha en una unión funciona igual que en una estructura.

Código de ejemplo:

#include <iostream>
using namespace std;

// union
union desserts {
  char flavor[50];
  int number;
};

union desserts* item = NULL;

int main() {
  item = (union desserts*)malloc(sizeof(union desserts));

  item->number = 5;
  cout << "The number of items:" << item->number;
}

Producción :

The number of items: 5

Operador de flecha vs. Operador de puntos en C++

Ahora que hemos cubierto los conceptos básicos de los operadores de puntos y flechas en C++, es hora de profundizar más y ver sus diferencias. Aquí hay una lista de todas las diferencias entre el punto y el operador de flecha que necesita saber:

  1. El operador de punto (.) accede directamente a los elementos de una clase, mientras que el operador de flecha (->), por otro lado, utiliza un puntero para hacerlo. Así es como se ve el acceso directo a un elemento:

    object_name.element
    

    Mientras que por otro lado, para acceder a un elemento usando un puntero, hacemos esto:

    pointer->element
    

    Esto significa que un operador de punto (.) se usa con objetos mientras que un operador de flecha se usa con punteros que apuntan a objetos. Tomemos un ejemplo para entender esto mejor.

    Digamos que tenemos un objeto Demo, y queremos llamar a uno de sus métodos test(). Para hacer esto, usaremos el operador punto (.) así:

    Demo.test()
    

    Si usamos el operador de flecha en su lugar, no significaría lo mismo. Aquí, el siguiente código llamará al método test() no en el objeto Demo sino en el objeto al que apunta el puntero Demo.

    Esto se debe a que el operador de flecha primero elimina la referencia del puntero para que podamos ir al objeto al que apunta.

    Demo->test
    
  2. No podemos aplicar un operador de punto (.) a los punteros, a diferencia del operador de flecha (->). Tenga en cuenta que (*p).elemento es equivalente a p->elemento.

    Este paréntesis dentro de (*p).elemento se usa porque la precedencia del operador punto (.) es mayor que *. Por lo tanto, para evaluar * primero, usamos paréntesis.

    Sin embargo, la mejor manera de simplificar esto es reemplazar toda esta parte - (*p) con un puntero como p-> para que no haya confusión sobre la precedencia.

  3. No podemos sobrecargar un operador de punto (.) mientras que podemos sobrecargar un operador de flecha (->) en C++. Para saber más sobre la sobrecarga de operadores en C++, consulte esta documentación.

Se trataba de cómo el punto y el operador de flecha son diferentes.

Conclusión

En este artículo, discutimos los conceptos básicos del punto y el operador de flecha y vimos en qué se diferencian. Vimos cómo el operador de flecha es una extensión del operador de paréntesis y punto y cómo afecta el funcionamiento de estos dos.

Artículo relacionado - C++ Operator