[ IvaVuk @ 19.08.2019. 13:19 ] @
Da li neko ima neki najprostiji primer preklapanja operatora u C++?
Da nisu kompleksni brojevi, da nisu vektori i da nisu neke teske klase?
I da li neko moze da objasni lepo, srpski, koji ce nam djavo preklapanje operatora?
Unapred hvala
PS. Citah ranije postove na ovu temu ali mi i dalje nista nije jasno.
[ mjanjic @ 19.08.2019. 13:28 ] @
Pa kad "sabiraš" brojeve i stringove, kud ćeš jednostavniji primer ^_^
[ Ivan Dimkovic @ 19.08.2019. 13:47 ] @
Citat:
IvaVuk
koji ce nam djavo preklapanje operatora?


Da bi ostatak koda bio jednostavan za pracenje i odrzavanje.

Zamisli recimo da implementiras klasu vektora. Ako operacije poput skalarnog proizvoda ili dodeljivanja vrednosti implementiras kao operatore, svakome ko cita kod ce biti jasno sta se desava, a sam kod ce biti cist.
[ djoka_l @ 19.08.2019. 14:50 ] @
Evo ti primer bez "teških" klasa.
Preopterećen je operator "<<" u klasi Ljubimac.
Operator je inače već preopterećen u ostream da služi za ispis (inače je to left shift operator).
Preopterećen je i "+", u prvom slučaju je to sabiranje dva int podatka, u drugom konkatenacija stringova


Code:

#include <iostream>

using namespace std;

class Ljubimac {
    private:
    string vrsta, ime;
    
    public:
    
    Ljubimac( string v, string i) { vrsta=v; ime = i;}
    
    friend ostream& operator << (ostream& os, const Ljubimac& pet) {
        os << "Moj ljubimac je " << pet.vrsta << " " << "po imenu " << pet.ime << "\n";
        return os;
    }
};

int main()
{
    Ljubimac Eva("mačka", "Eva"); 
    cout << Eva;
    cout << 3 + 4 << "\n";
    cout << string("Hello") + string(" World") << "\n";

    return 0;
}

[ Branimir Maksimovic @ 19.08.2019. 16:59 ] @
Preklapanje moze da se odnosi i na override i overload, gde se preklapanje prirodnije prevodi kao override sto nije namera OP-a. Djoka je ispravno rekao overload, tj preopterecenje.
[ IvaVuk @ 19.08.2019. 17:48 ] @
ma sve kristalno jasno. Stvarno, ne znam sta bih radila da nisam vas pitala. Nezamenljivi ste.
Pogotovu djoka (hm... lezi ti nadimak samo tako)
friend ostream& operator << (ostream& os, const Ljubimac& pet) {
os << "Moj ljubimac je " << pet.vrsta << " " << "po imenu " << pet.ime << "\n";
return os;
pa hvala do neba... ama sve si objasnio.
nemojte vise toliko truda da razbacujete... pa to vam ionako niko ne ceni... tako, napisite po dve tri reci... pametnom dosta.
[ Whitewater @ 19.08.2019. 18:39 ] @
Citat:
IvaVuk
Pogotovu djoka (hm... lezi ti nadimak samo tako)


!? :-)
[ djoka_l @ 20.08.2019. 08:36 ] @
Citat:
IvaVuk:
ma sve kristalno jasno. Stvarno, ne znam sta bih radila da nisam vas pitala. Nezamenljivi ste.
Pogotovu djoka (hm... lezi ti nadimak samo tako)
friend ostream& operator << (ostream& os, const Ljubimac& pet) {
os << "Moj ljubimac je " << pet.vrsta << " " << "po imenu " << pet.ime << "\n";
return os;
pa hvala do neba... ama sve si objasnio.
nemojte vise toliko truda da razbacujete... pa to vam ionako niko ne ceni... tako, napisite po dve tri reci... pametnom dosta.


Ma da, šta će ti operatori, to su dokoni programeri samo izmislili da bi dosađivali deci. Lepo idi na Whatsup, da ti neko uz mnogo LOL objasni bez teških klasa. Idi, molim te, kome još trebaju kompleksni brojevi ili vektori.
[ Zurg @ 20.08.2019. 08:37 ] @
@IvaVuk

Đokin primer je dobar. Jesi li stvarno skapirao(la) ili je ono bila ironija?

P.S.
Na osnovu Đokine reakcije vidim da je bila ironija. Pokušaću ja da ti objasnim.

Da li ti je jasna ova funkcija?

Code:

     friend ostream& posaljiPodatkeLjubimcaNaIzlaz (ostream& os, const Ljubimac& pet) {
        os << "Moj ljubimac je " << pet.vrsta << " " << "po imenu " << pet.ime << "\n";
        return os;
    }


Funkcija vraća referencu na objekat tipa ostream, a vraća onaj objekat koji dobije kao ulazni parametar. Uzima dva parametra, izlazni tok (ostream) i objekat klase Lubimac, čije je podatke potrebno poslati na izlaz.
Ovakvu funkciju mogao bih da pozovem sa:

Code:

posaljiPodatkeLjubimcaNaIzlaz(std::cout, petunija);


Obična funkcija, osim što je prijatelj (bolji termin je kooperativna) klasi Ljubimac, pa može da pristupi i privatnim podacima. Ovo bi trebalo da je jasno.

Zar nije lepše kada overloadujemo operator, pa se funkcija više ne zove posaljiPodatkeLjubimcaNaIzlaz, već operator <<.

Code:

     friend ostream& operator << (ostream& os, const Ljubimac& pet) {
        os << "Moj ljubimac je " << pet.vrsta << " " << "po imenu " << pet.ime << "\n";
        return os;
    }


Sada mogu da prikažem podatke ljubimca na sledeći način:

Code:

   std::cout<<petunija;


Kraće je i jasnije. Zar overloadovanje operatora nije strava?

[Ovu poruku je menjao Zurg dana 20.08.2019. u 09:52 GMT+1]

[Ovu poruku je menjao Zurg dana 20.08.2019. u 09:52 GMT+1]

[Ovu poruku je menjao Zurg dana 20.08.2019. u 09:54 GMT+1]