operador punto (.) en C/C++

El operador de punto (.) se utiliza para la selección directa de miembros a través del nombre del objeto. En otras palabras, se utiliza para acceder al objeto secundario.

Sintaxis:

object.member;

Por ejemplo:

#include <stdio.h>
  
struct Point {
    int x, y;
};
  
int main()
{
    struct Point p1 = { 0, 1 };
  
    // Accessing members of point p1
    // using the dot operator
    p1.x = 20;
  
    printf("x = %d, y = %d", p1.x, p1.y);
  
    return 0;
}
Producción:

x = 20, y = 1

¿Es el punto (.) en realidad un operador ?

Sí, el punto (.) es en realidad un operador en C/C++ que se usa para la selección directa de miembros a través del nombre del objeto. Tiene la precedencia más alta en el gráfico de asociatividad y precedencia de operadores después de los corchetes.

¿Hay algún otro operador como el operador punto (.)?

Sí. Hay otro operador de este tipo (->). Se denomina operador de «selección indirecta de miembros» y tiene una precedencia justo debajo del operador de punto (.). Se utiliza para acceder a los miembros indirectamente con la ayuda de punteros .

Ejemplo:

void addXtoList(struct Node* node, int x)
{
    while (node != NULL) {
        node->data = node->data + x;
        node = node->next;
    }
}

¿Se puede sobrecargar el operador de punto (.)?

No, el operador Punto (.) no se puede sobrecargar. Si lo hace, se producirá un error.

Ejemplo:

// C++ program to illustrate
// Overloading this .(dot) operator
  
#include <iostream>
using namespace std;
  
class cantover {
public:
    void fun();
};
  
// assume that you can overload . operator
// Class X below overloads the . operator
class X {
  
    cantover* p;
  
    // Overloading the . operator
    cantover& operator.()
    {
        return *p;
    }
  
    void fun();
};
  
void g(X& x)
{
  
    // Now trying to access the fun() method
    // using the . operator
    // But this will throw an error
    // as we have overloaded the . operator above
    // Hence compiler won't allow doing so
    x.fun();
}

Producción:

prog.cpp:11:20: error: expected type-specifier before '.' token
  cantover& operator.() 
                    ^
prog.cpp:11:12: error: expected ';' at end of member declaration
  cantover& operator.() 
            ^
prog.cpp:11:20: error: expected unqualified-id before '.' token
  cantover& operator.() 
                    ^
prog.cpp: In function 'void g(X&)':
prog.cpp:15:7: error: 'void X::fun()' is private
  void fun(); 
       ^
prog.cpp:19:8: error: within this context
  x.fun(); // X::fun or cantover::fun or error? 
        ^

Publicación traducida automáticamente

Artículo escrito por Code_r y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *