Zadani z zakresu programowania obiektowego C++ przeciążenie operatorów

0

Miałem wczoraj na laboratorium z programowania obiektowego takie oto zadanie (zdjęcia w załączniku) i przyznam że sprawiło mi ono sporo problemów...Znalazłby się ktoś chętny aby pomóc i pokazał jak to rozwiązać? Jestem dopiero na pierwszym roku studiów i zaczynam swoją przygodę z kodowanie więc proszę o wyrozumiałość. Z góry doczekuje za pomoc i przepraszam za jakość zdjęć (robione z ukrycia #STUDIA).

0

Ok, pokaż co już masz.

0

Teraz myślę w jaki sposób przeciążyć operator "+" abym mógł dodać do siebie dwa obiekty klasy wektor(u mnie Vector)
Doszedłem do takiego czegoś:

Vector operator +(const Vector &V)
    {
        double *tab1 = new double[ z+V.z ];
        for (int i=0;i<z;i++)
        {
            tab1[i]=this->mm;
        }
        for (int i=z;i<z+V.z;i++)
        {
            tab1[i]=V.mm;
        }
    
        this->z+V.z; //"z" oznacza rozmiar tablicy


        return Vector();

    }

Mam problem z tym aby wskaźnik *tab wskazujący na tablice obiektów w klasie Vector przestawić na tablice powstałą z dodania dwóch tablic operatorem "+"

0
Nowykio napisał(a):

Teraz myślę w jaki sposób przeciążyć operator "+" abym mógł dodać do siebie dwa obiekty klasy wektor(u mnie Vector)
Doszedłem do takiego czegoś:

Vector operator +(const Vector &V) 
    {
        double *tab1 = new double[ z+V.z ];
        for (int i=0;i<z;i++)
        {
            tab1[i]=this->mm;
        }
        for (int i=z;i<z+V.z;i++)
        {
            tab1[i]=V.mm;
        }
    
        this->z+V.z; //"z" oznacza rozmiar tablicy ///// To nic nie robi 


        return Vector(); ///// zwracasz pusty Vector, przy czym tab1 jest niezwolnione, więc masz wyciek pamięci

    }

Mam problem z tym aby wskaźnik *tab wskazujący na tablice obiektów w klasie Vector przestawić na tablice powstałą z dodania dwóch tablic operatorem "+"

Ogólnie to ten operator jest niezgodny z treścią zadania. Po pierwsze miałeś zaimplementować operator += a nie +. Po drugie zaś miałeś zaimplementować operator, który pozwala na dodanie liczby a nie dwóch wektorów. Ogólnie to powinno być coś takiego:

///zakładam, że klasa Vector wygląda mniej więcej tak (pisane na kolanie, chodzi mniej więcej o ideę):
class Vector
{
public:
    Vector() : data(nullptr), size(0), allocated(0) {}
    Vector(unsigned amount, double value) : data(new double[amount + amount / 2]), size(amount), allocated(amount + amount / 2)
    {
    // implementacja 
    }
private:
    double *data;
    unsigned size; //ilość danych w wektorze
    unsigned allocated; //ilość zaalokowanej pamięci
}

//i teraz twój operator powinien wyglądać tak:
Vector& operator+=(double number)
{
    if (size == allocated) //znaczy, że skończyło się miejsce
    {
        unsigned newAllocSize = allocated + allocated / 2; //albo ile tam chcesz więcej
        double *newData = new double[newAllocSize]; //alokujemy nową tablicę
        memcpy(newData, data, size * sizeof(double)); //kopiujemy stare dane do nowej tablicy (możesz też użyć memmove)
        delete[] data; //zwalniamy starą tablicę
        data = newData; //przypisujemy nową
        allocated = newAllocSize; // zwiększamy licznik zaalokowanej pamięci
    }
    data[size] = number; //dodajemy nową wartość
    ++size; //zwiększamy rozmiar naszej tablicy
    return *this;
}

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