La condición es simple, solo puedes llamar a funcion1 o funcion2 a través de un objeto de tipo "clase".
En este caso:
Código:
pa.funcion1(10,10).funcion1(10,10).funcion2(2).funcion2(3).funcion1(5,5);
pa.funcion1(10, 10) retorna una referencia al objeto "pa" por lo que a través de dicho valor de retorno puedes volver a llamar a funcion1 o funcion2, esto es:
Código:
pa.funcion1(10,10).funcion1(10,10)
Lo cual nuevamente retorna una referencia a "pa", en el caso de llamar a funcion2 el valor de retorno es una copia de "pa" pero este sigue siendo un objeto de tipo "clase", en fin puedes seguir asi cuantas veces quieras.
Prueba la siguiente modificación al código, espero te quede más claro.
Código C++:
Ver original#include <iostream>
#include <string>
using namespace std;
class clase
{
float a,c;
string name;
public:
clase(int = 0, int = 0);
clase & funcion1(int,int);
clase funcion2(int);
clase(string s):name(s), a(0), c(0){}
clase(const clase& cl){
a = cl.a;
c = cl.c;
name = cl.name + "Cpy";
}
friend ostream & operator<<(ostream &, const clase &);
};
clase::clase(int a_, int c_) : a(a_), c(c_) {}
clase & clase::funcion1(int i, int j)
{
cout << name << ".funcion1(" << i << "," << j << ")";
a += i;
c += j;
cout << " ... now " << name << " is " << *this;
cout << " ... return " << name << "&" << endl;
return *this;
}
clase clase::funcion2(int x)
{
cout << name << ".funcion2(" << x << ")";
a *= x;
c *= x;
cout << " ... now " << name << " is " << *this;
cout << " ... return " << name << "Cpy" << endl;
return *this;
}
ostream & operator<<(ostream & os, const clase & clas)
{
os << "(" << clas.a << "," << clas.c << ")";
return os;
}
int main()
{
clase pa("pa"), pb("pb"),a("a"),b("b");
pb = pa.funcion1(10,10).funcion1(10,10).funcion2(2).funcion2(3).funcion1(5,5);
cout << endl;
b = a.funcion2(3).funcion1(5,5);
cout << endl;
cout << "pa = " << pa << endl;
cout << "pb = " << pb << endl;
cout << "a = " << a << endl;
cout << "b = " << b << endl;
return 0;
}
Cita: El tema que debes de buscar en la red "sobrecarga de operadores en c++"
Es buena la sugerencia de margarito pero en este caso solo es cuestión del tipo de retorno en las funciones.
saludos.