zielonyy Temat założony przez niniejszego użytkownika |
[C++] przeciążanie operatora dodawania » 2013-09-09 16:25:24 witam chcialem przeciazyc operator dodawania dla dla wektora(x,y,z), nie jestem do konca przekonany co powinna zwracac metoda : vektor operator +( const vektor & liczba1, const vektor liczba2 ) { return }
ponizej zalaczam caly kod programu: #include <iostream> #include <string.h>
using namespace std;
class vektor { int x, y, z; int wartosc; public: vektor( int wartoscX, int wartoscY, int wartoscZ ) : x( wartoscX ) , y( wartoscY ) , z( wartoscZ ) { } friend ostream & operator <<( ostream & out, vektor & punkt ); friend istream & operator >>( istream & out, vektor & punkt ); vektor( int val ) : wartosc( val ) { } friend vektor operator +( const vektor & liczba1, const vektor liczba2 ); int returnwartosc() { return( x, y, z ); } }; vektor operator +( const vektor & liczba1, const vektor liczba2 ) { return }
ostream & operator <<( ostream & out, vektor & punkt ) { out << "(" << punkt.x << "," << punkt.y << "," << punkt.z << ")"; return out; }
istream & operator >>( istream & in, vektor & punkt ) { in >> punkt.x; in >> punkt.y; in >> punkt.z; return in; }
int main() { vektor punkt1( 10, 6, 6 ), punkt2( 10, 20, 30 ); punkt3 = punkt2 + punkt1; cout << punkt1 << endl; cout << punkt2 << endl; cout << punkt3 << endl; return 0; }
[ cpp ]
z gory dziekuje za pomoc.
|
|
b00rt00s |
» 2013-09-09 16:43:07 Jest to jedna z tych informacji, które możesz znaleźć z łatwością przez google. Poza tym możesz napisać sobie jakiś testowy program i sprawdzić w nim różne wersje. Ta, która da Ci oczekiwany rezultat będzie poprawna ;). |
|
DejaVu |
» 2013-09-09 17:26:57 |
|
zielonyy Temat założony przez niniejszego użytkownika |
» 2013-09-10 11:38:48 DejaVu dziekuje za pomoc , czyli gdybym chcial przeciazyc operator dodawania dla : to moj program wyglada nastepujaco: #include <iostream> #include <string.h>
using namespace std;
class vektor { private: int x; int wartosc; public: vektor( int wartoscX ) : x( wartoscX ) { } friend ostream & operator <<( ostream & out, vektor & punkt ); friend istream & operator >>( istream & out, vektor & punkt ); friend vektor operator +( const vektor & liczba1, const vektor & liczba2 ); int returnwartosc() { return x; } }; vektor operator +( const vektor & liczba1, const vektor & liczba2 ) { return vektor( liczba1.x + liczba2.x ); }
ostream & operator <<( ostream & out, vektor & punkt ) { out << "(" << punkt.x << ")" << endl; return out; }
istream & operator >>( istream & in, vektor & punkt ) { in >> punkt.x; return in; }
int main() { vektor punkt1( 10 ), punkt2( 10 ); vektor punkt3 = punkt2 + punkt1; cout << punkt1 << endl; cout << punkt2 << endl; cout << punkt3 << endl; return 0; }
Ale dalej nie wiem jak to powinno zostac napisane dla : jak zapisac aby moja funkcja : zwracala dodawanie dla x,y,z ? friend vektor operator +( const vektor & liczba1, const vektor & liczba2 );
|
|
DejaVu |
» 2013-09-10 11:54:59 Zamiast liczby zwracasz obiekt. Obiektowi zwracanemu nadajesz odpowiednie wartości i gotowe. |
|
zielonyy Temat założony przez niniejszego użytkownika |
» 2013-09-11 22:34:13 Tak powinna wygladac moja funkcja ?? dlaczego wystepuje blad "no matching function for call to vektor::vektor()' #include <iostream> #include <string.h>
using namespace std;
class vektor { int x, y, z; public: vektor( int wartoscX, int wartoscY, int wartoscZ ) : x( wartoscX ) , y( wartoscY ) , z( wartoscZ ) { } friend ostream & operator <<( ostream & out, vektor & punkt ); friend istream & operator >>( istream & out, vektor & punkt ); friend vektor operator +( const vektor & liczba1, const vektor liczba2 ); int returnwartoscX() { return x; } int returnwartoscY() { return y; } int returnwartoscZ() { return z; } }; vektor operator +( const vektor & liczba1, const vektor liczba2 ) { vektor suma; suma.x = liczba1.x + liczba2.x; suma.y = liczba1.y + liczba2.y; suma.z = liczba1.z + liczba2.z; return suma; }
ostream & operator <<( ostream & out, vektor & punkt ) { out << "(" << punkt.x << "," << punkt.y << "," << punkt.z << ")"; return out; }
istream & operator >>( istream & in, vektor & punkt ) { in >> punkt.x; in >> punkt.y; in >> punkt.z; return in; }
int main() { vektor punkt1( 10, 6, 6 ), punkt2( 10, 20, 30 ); vektor punkt3 = punkt2 + punkt1; cout << punkt1 << endl; cout << punkt2 << endl; cout << punkt3 << endl; return 0; }
z gory dziekuje za pomoc. |
|
DejaVu |
» 2013-09-11 22:54:35 a działa? /edit: Nie - nie czytałeś w ogóle tego co dostałeś: vektor vektor::operator +( const vektor & liczba ) const { return vektor( x + liczba.x, y + liczba.y, z + liczba.z ); }
Nie ma potrzeby robienia operatora + jako funkcja, skoro wszystkie typy danych są znane w chwili definiowania klasy vector. |
|
Elaine |
» 2013-09-11 23:07:12 Nie ma potrzeby robienia operatora + jako funkcja |
Jest: niejawne konwersje. Jeśli operator + jest zdefiniowany jako funkcja składowa, ewentualna niejawna konwersja zajdzie tylko dla prawego argumentu, jeśli jako zwyczajna funkcja, również dla lewego. Dlatego dla spójności z typami wbudowanymi operator + praktycznie nigdy nie powinien być definiowany jako funkcja składowa. |
|
« 1 » 2 |