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#include <iostream>
using namespace std;
class clase
{
float a,c;
public:
clase(int = 0, int = 0);
clase & funcion1(int,int);
clase funcion2(int);
friend ostream & operator<<(ostream &, const clase &);
};
clase::clase(int a_, int c_) : a(a_), c(c_) {}
clase & clase::funcion1(int i, int j)
{
a += i;
c += j;
return *this;
}
clase clase::funcion2(int x)
{
a *= x;
c *= x;
return *this;
}
ostream & operator<<(ostream & os, const clase & clas)
{
os << "(" << clas.a << "," << clas.c << ")";
return os;
}
int main()
{
clase pa, pb,a,b;
[I][B]pb = pa.funcion1(10,10).funcion1(10,10).funcion2(2).funcion2(3).funcion1(5,5);[/B][/I]
cout << pa << endl;
cout << pb << endl;
return 0;
}
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.