przeciążąnie ostream

0

Cześć :)
Jaki tu robię błąd:
#include <iostream>

using namespace std;

class Fraction {
private:
    int numerator;
    int denominator;
public:

    Fraction(int a, int b) {
        this->numerator = a;
        this->denominator = b;
    }

    const Fraction operator*(const Fraction& right) {
        return Fraction(this->numerator * right.numerator, this->denominator * right.denominator);
    }

    
    ostream& operator<<(ostream& out) {
        out << this->numerator << "/" << this->denominator << endl;
        return out;
    }
};

int main(int argc, char** argv) {
    Fraction f(2, 6);
    Fraction g(6, 5);
    cout << f * g;

    return 0;
}
3
friend ostream& operator<<(ostream& out, const T& obj);
0

czyli ten operator musi być zdefiniowany na zewnątrz klasy?

2

Tak.
Ponieważ twoja klasa musi być DRUGIM parametrem operatora, a gdy operator jest zdefiniowany wewnątrz klasy, automatycznie staje się pierwszym.

0

ok, rzeczywiście.
A jakie jeszcze operatory muszą być poza?

1
mielony napisał(a):

A jakie jeszcze operatory muszą być poza?
Nie ma takich.
Zawsze możesz dopisać dopisać ten operator do klasy ostream, ale ...

0

aha, do klasy ostream i wtedy jako pierwszy parametr brałby obiekt Fraction?
Dobrze, to które trzeba zdefiniować na zewnątrz, jeżeli nie chcemy wnikać do klas dostarczonych.

0
mielony napisał(a):

do klasy ostream i wtedy jako pierwszy parametr brałby obiekt Fraction?

Jako pierwszy i jedyny.

mielony napisał(a):

Dobrze, to które trzeba zdefiniować na zewnątrz, jeżeli nie chcemy wnikać do klas dostarczonych.

Te dla których jedyną alternatywą jest psucie klas dostarczonych.

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