Przeladowanie operatora + w klasie czy poza nia ?

0

Programik z tej stronki i moje pytanie dlaczego Foo operator+(Foo const&); Nie jest zdefiniowany jako friend i jak to jest gdzie lepiej przeladowywac operatory w klasie czy poza nia ? J

#include <iostream>
using namespace std;

class Foo {
public:
    int pierwsza;
    int druga;
    Foo();
    Foo(int, int);

    friend ostream& operator<<(ostream&, Foo const&);
    friend istream& operator>>(istream&, Foo&);
    Foo operator+(Foo const&);
};

Foo::Foo()
{
    pierwsza = druga = 0;
}

Foo::Foo(int a, int b)
{
    pierwsza = a;
    druga = b;
}

ostream& operator<<(ostream& wyjscie, Foo const& ex)
{
    wyjscie << "Pierwsza liczba: " << ex.pierwsza << " oraz druga: " << ex.druga << endl;
    return wyjscie;
}

istream& operator>>(istream& wejscie, Foo& ex)
{
    wejscie >> ex.pierwsza >> ex.druga;
    return wejscie;
}

Foo Foo::operator+(Foo const& ex)
{
    Foo tmp(pierwsza + ex.pierwsza, druga + ex.druga);
    return tmp;
}

int main()
{
    Foo ex1, ex2, ex3;

    cout << "Podaj 2 liczby dla:\n"
         << "Obiektu pierwszego: ";
    cin >> ex1;
    cout << "Oraz drugiego: ";
    cin >> ex2;

    cout << ex1 << ex2 << ex1 + ex2;

    system("pause>nul");
}
 
1

zawsze masz tak ze
1 klasa -> dwa pliki
klasa.h -> deklaracje
klasa.cpp -> implementacja

takze sadze ze odpowiedzialem na Twoje pytanie ;)

0

Czyli lepiej poza nia a dlaczego nie ma przydomku friend ? ;d

1

a po co? Kazda klasa moze definiowac swoje operatory. Ty po prostu "dodajesz" typ do ofstream i dlatego potrzebujesz friend (nie potrafie tego nietechnicznie wytlumaczyc)

1

bo:

ex1 + ex2

jest tym samym co:

ex1.operator+(ex2)
0

Czyli to jest zwyczajna metoda klasy z tym ze to przeladowanie operatora tak ?

0

tak

0

Hmm a to friend przy przeladowaniu operatora wyjscia ? (wiem tyle ze wyjscia i wejscia mam dawac friend)

1 użytkowników online, w tym zalogowanych: 0, gości: 1