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; }
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? ^