Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] przeciążanie operatora dodawania

Ostatnio zmodyfikowano 2013-09-11 23:53
Autor Wiadomość
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 :

C/C++
vektor operator +( const vektor & liczba1,
const vektor liczba2 )
{
    return // liczba(liczba1 + licyba2); ???
}

ponizej zalaczam caly kod programu:

C/C++
#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 // liczba(liczba1 + licyba2);
}

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.
P-91760
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 ;).
P-91761
DejaVu
» 2013-09-09 17:26:57
P-91766
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 :
C/C++
private:
int x;

to moj program wyglada nastepujaco:

C/C++
#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 :

C/C++
private:
int x, y, z;

jak zapisac aby moja funkcja :  zwracala dodawanie dla x,y,z ?

C/C++
friend vektor operator +( const vektor & liczba1,
const vektor & liczba2 );
P-91831
DejaVu
» 2013-09-10 11:54:59
Zamiast liczby zwracasz obiekt. Obiektowi zwracanemu nadajesz odpowiednie wartości i gotowe.
P-91832
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()'

C/C++
#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.
P-91964
DejaVu
» 2013-09-11 22:54:35
a działa?

/edit:
Nie - nie czytałeś w ogóle tego co dostałeś:
C/C++
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.
P-91966
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.
P-91968
« 1 » 2
  Strona 1 z 2 Następna strona