[Cpp] Przeciążony operator dodawania i przypisania

Witajcie.

Mam problem tymi przeciążonymi funkcjami. Mianowicie mam własną klasę, której elementem jest wskaźnik do dynamicznie alokowanej tablicy. Naturalnie operator dodawania sumuje składniki stojące w odpowiednich miejscach w tablicach, zwracam nim obiekt utworzony lokalnie (wewnątrz operatora). Operator przypisania natomiast jako argument (prawy operand) przyjmuje referencję do obiektu. Wyposażyłem ją oczywiście w odpowiedni konstruktor kopiujący. Zależy mi na instrukcji

Klasa pierwszy, drugi, wynik;

wynik = pierwszy + drugi;

jednak nie wiem, jak zgrać ze sobą zwracane typy. Jest to możliwe?

C++ byłby beznadziejnym językiem, gdyby nie było możliwe.

#include 


template

class Klasa {

private:

    int *tab;

public:

    Klasa() : tab(new int[S]) {};

    Klasa(const Klasa& klasa) : tab(new int[S]) {for (int i=0; i
    ~Klasa() {delete[] tab;}

    Klasa& operator=(const Klasa& klasa) {

        for (int i=0; i
        return *this;

    }

    Klasa operator+(const Klasa& klasa) const {

        Klasa ret;

        for (int i=0; i
        return ret;

    }

    int operator[](int i) const {return tab[i];}

    int& operator[](int i) {return tab[i];}

};


int main() {

    Klasa<3> a, b, c;

    for (int i=0; i<3; i++) {

        b[i] = i;

        c[i] = i + 5;

    }

    a = b + c;

    for (int i=0; i<3; i++)

        std::cout << a[i] << std::endl;

    return 0;

}

[/code]

Przy okazji, jeżeli używasz g++, to polecam używanie opcji -Wall -Wextra -pedantic -Weffc++

Pomogło. Próbowałem zdawałoby się wszystkich opcji, jednak o tym nie pomyślałem. Dzięki wielkie !

Dodane 01.04.2012 (N) 14:03

Hum, albo jeszcze zapytam, czy można to zrobić deklarując operator dodawania jako funkcję globalną dwóch Klas, zaprzyjaźnioną z klasą?

Można. Tylko wtedy masz trochę więcej pisania :wink:

Właśnie tego próbowałem, ale jak mówiłem wyżej - nie potrafiłem zgrać typów. Mógłbyś mi to naprędce wytłumaczyć na Twoim własnym przykładzie?

A co masz na myśli pisząc “nie potrafiłem zgrać typów”? Co próbowałeś, co nie działało, czego nie rozumiesz?

Przerobiłem swój kod wg Twojej porady i teraz szczerze powiedziawszy nie potrafię napisać tego moim poprzednim sposobem. Na razie sobie to daruję, ale ciekawi mnie jeszcze, jak dokonać

Klasa a, b;

// ...

Klasa c = a + b;

Podejrzewam, że wtedy działa konstruktor kopiujący, a nie przeciążony operator przypisania, czy tak?

Tak.

Klasa a, b;

Klasa c(a); // konstruktor kopiujący

Klasa d = b; // też konstruktor kopiujący

c = d; // operator przypisania