// Programa clas26.cpp de exemplo para ilustrar conceitos de // funcoes operador com atributo friend // Original do livro TURBO C++ SCHILDT pg 419 #include class tres_d { int x, y, z; // coordenadas 3-d public: friend tres_d operator+(tres_d op1, tres_d op2); tres_d operator=(tres_d op2); // op1 esta implicito tres_d operator++(void); // op1 tambem implicito void mostra(void); void atribui(int mx, int my, int mz); }; // agora esta e' uma funcao friend tres_d operator+(tres_d op1, tres_d op2) { tres_d temp; temp.x = op1.x + op2.x; // estas sao adicoes temp.y = op1.y + op2.y; // e o + retem seu significado temp.z = op1.z + op2.z; // original return temp; } // sobrecarrega o = tres_d tres_d::operator=(tres_d op2) { x = op2.x; y = op2.y; z = op2.z; return *this; } // sobrecarrega um operador unario tres_d tres_d::operator++(void) { x++; y++; z++; return *this; } // mostra as coordenadas X, Y, Z void tres_d::mostra(void) { cout << x << ", "; cout << y << ", "; cout << z << "\n"; } // atribui coordenadas void tres_d::atribui(int mx, int my, int mz) { x = mx; y = my; z = mz; } main(void) { tres_d a, b, c; a.atribui(1, 2, 3); b.atribui(10, 10, 10); a.mostra(); b.mostra(); c = a + b; // adiciona a e b c.mostra(); c = a + b + c; // adiciona a, b e c c.mostra(); c = b = a; // atribuicao multipla c.mostra(); b.mostra(); ++c; //incrementa c c.mostra(); return 0; } // resultado // 1, 2, 3 // 10, 10, 10 // 11, 12, 13 // 22, 24, 26 // 1, 2, 3 // 1, 2, 3 // 2, 3, 4