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).
Ok, pokaż co już masz.
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 "+"
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 klasieVector
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;
}