Ver Mensaje Individual
  #1 (permalink)  
Antiguo 26/08/2010, 12:38
SuRdO
 
Fecha de Ingreso: agosto-2010
Mensajes: 8
Antigüedad: 13 años, 8 meses
Puntos: 0
Uso del . en c++

Acabo de ver algo y que no acabo de entender. He buscado por la red y no he encontrado nada que me haya convencido del siguiente problema que tengo. Fijaros, he simplificado mi estructura a un ejemplo simple:

Código C:
Ver original
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5.  
  6. class clase
  7. {
  8.     float a,c;
  9.     public:
  10.         clase(int = 0, int = 0);
  11.         clase & funcion1(int,int);
  12.         clase funcion2(int);
  13.         friend ostream & operator<<(ostream &, const clase &);
  14. };
  15.  
  16. clase::clase(int a_, int c_) : a(a_), c(c_) {}
  17.  
  18. clase & clase::funcion1(int i, int j)
  19. {
  20.     a += i;
  21.     c += j;
  22.     return *this;
  23. }
  24.  
  25. clase clase::funcion2(int x)
  26. {
  27.     a *= x;
  28.     c *= x;
  29.     return *this;
  30. }
  31.  
  32. ostream & operator<<(ostream & os, const clase & clas)
  33. {
  34.     os << "(" << clas.a << "," << clas.c << ")";
  35.     return os;
  36. }
  37.  
  38. int main()
  39. {
  40.  
  41.     clase pa, pb,a,b;
  42.  
  43.     [I][B]pb = pa.funcion1(10,10).funcion1(10,10).funcion2(2).funcion2(3).funcion1(5,5);[/B][/I]
  44.  
  45.     cout << pa << endl;
  46.     cout << pb << endl;
  47.    
  48.     return 0;
  49. }

Está claro que las funciones 1 y 2 están puestas para ir con cuidado, pero mi pregunta se refiere al operador . (se dice así?). Es decir, ¿que condiciones se tienen que dar para construir una sentencia de este tipo? ¿Cómo se lee esa linea?

El resultado que da el programa es (40,40) y (125,125)
En cambio si pongo esto:

Código:
b = a.funcion2(3).funcion1(5,5);
el resultado en pantalla es el siguiente:

(0,0) y (5,5)

Gracias.