Klasa wektor - operator +

Klasa wektor - operator +
H3
  • Rejestracja:około 12 lat
  • Ostatnio:około 12 lat
  • Postów:3
0

Witam,

Posiadam klasę Vector i muszę zdefiniować dodawanie tych wektrów, lecz mam problem z operatorem +.
Bardzo proszę o pomoc w poprawieniu operatora +, napisanie operatora indeksacji [] i operatora = oraz pomocy jak wywołać potem dodawanie w mainie.

Operatory powinny zwracać nowy wektor.


class Vec
{
private:
string nazwa;
static int n; // rozmiar wektora (liczbą elementów tablicy wskazywanej przez V)
double *V; // wskazuje na poczatkowy element n elementowej tablicy

public:

Vec( int n, string nazwa)
{
cout<<endl<<"Wywolano konstruktor z parametrami."<<endl;
};

Vec ()
{
cout<<endl<<"Wywolano konstruktor bezparametrowy."<<endl;
};

Vec(const Vec &)
{
cout<<endl<<"Wywolano konstruktor kopiujacy."<<endl;
};

~Vec() /
{
cout<<endl<<"Wywolano destruktor."<<endl;
delete []V;
V = 0;
n--;
};


Vec * Vec::wprowadz()
{
int k; // liczba wektorow

cout<<"Podaj liczbe wektorow: ";
cin>>k;

Vec *V;
V = new Vec [k];

cout<<"Podaj dlugosc wektora: ";
cin>> n;
cout<<endl;

double *tablica = new double [n];

for (int j=0;j<k;j++)
{
cout<<"Podaj nazwe wektora: ";
cin>>V[j].nazwa;

for (int i=0;i<n;i++)
{
cout<<i+1<<"wspolrzedna: " << endl;
cin>> tablica[i];
}
}

return V;
}

Vec Vec::operator+(const Vec &b) const
{
Vec wynik;

for(int i=0; i<n; i++)
{
wynik[i] = this->V[i] + b.V[i];
//wektor1.V[i] = this->V[i] + wektor1.V[i];
}

return wynik;
}

n0name_l
"Operatory powinny zwracać nowy wektor.", a to bardzo ciekawe...
Patryk27
Moderator
  • Rejestracja:prawie 18 lat
  • Ostatnio:prawie 2 lata
  • Lokalizacja:Wrocław
  • Postów:13042
0

Zacznijmy od tego, że nigdzie nie ustawiasz pola n w klasie, dodatkowo dlaczego pojedynczy wektor jest zbiorem wektorów? :|


Shalom
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
0

Dodatkowo alokujesz pamięć dla lokalnej zmiennej a nie dla pola klasy...


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
H3
  • Rejestracja:około 12 lat
  • Ostatnio:około 12 lat
  • Postów:3
0

Zapomniałem skopiować do posta.

int Vec::n = 0; // poza klasami, dla wszystkich funkcji.

Dlaczego pojedynczy wektor jest zbiorem wektorow? Jest tablicą w której są wektory, i chciałbym się odwołać do jej elementów, czyli współrzędnych, lecz właśnie nie potrafię tego zrobić...
Funkcja operator+ powinna zwracać wektor.

H3
  • Rejestracja:około 12 lat
  • Ostatnio:około 12 lat
  • Postów:3
0

Zmieniłem na taką wersję, lepiej jest teraz?

------------------------------------------
int Vec::n = 0;

double * Vec::Wczytaj()
{
cout<<"Podaj nazwe wektora: ";
cin>> nazwa;
cout<<"Podaj dlugosc wektora: ";
cin>> n;
cout<<endl;

double *V;
V = new double [n];

cout<<"Podaj wspolrzedne: ";

for (int i=0;i<n;i++)
{
	cout<<i+1<<"wspolrzedna: " << endl;
	cin>> V[i];
}

return V;

}

Vec * Vec::wprowadz()
{
int k; // liczba wektorow
cout<<"Podaj liczbe wektorow: ";
cin>>k;

Vec *tablica;
tablica = new Vec [k];

for (int j=0;j<k;j++)
{
	cout << "Wprowadz dane wektora nr : " << j+1 << endl;
	tablica[j].Wczytaj();
}

return tablica;

}

**Vec Vec::operator+(Vec &b)
{
Vec wynik;
Vec * wynik = new Vec [wynik.n];

	for(int i=0; i<n; i++)
	{
		wynik[i] = this->V[i] + b.V[i];
		//wektor1.V[i] = this->V[i] + wektor1.V[i];
	}

return wynik;

}**

-------------------------------

Tylko w dalszym ciągu nie mogę się odwołać do elementów tablicy, bo gdy uruchamiam program, to mogę wpisać dane, ale sypie się gdy przechodzi do dodawania.

Rekman
Odpisując nie widziałem tych "poprawek". Operator+ katastrofa - to się kompiluje? Reszta...
Rekman
  • Rejestracja:prawie 13 lat
  • Ostatnio:prawie 10 lat
  • Postów:148
0

Posiadam klasę Vector i muszę zdefiniować dodawanie tych wektrów, lecz mam problem z operatorem +.

Tylko, że ta Twoja klasa nic nie robi. Konstruktor domyślny, kopiujący i inne... Z koleii destrukor usuwa coś czego nie ma (błąd murowany)!

Drugie. Pole statyczne przechowyjące rozmiar tablicy V! To wszystkie obiekty klasy Vec mają posiadać tego samego rozmiaru tablice? I dlaczego ten rozmiar zmniejszasz w momencie usuwania obiektu? Mogą istnieć jeszcze inne.

I operator+ (arytmetyczny).

Vec Vec::operator+(const Vec &b) const
{
Vec wynik;
//...
wynik[i] = this->V[i] + b.V[i];
}

return wynik;
}

W twoim wydaniu przypisanie do zmienne wynik wymaga przeładowania operatora[] na rzecz klasy Vec. Jak to zrobić?

Kopiuj
double& operator[](unsigned indeks)
{
    if(indeks >= n)
        //rzuca błąd
   return V[indeks];
}

Dla obiektu wynik konstruktor domyślny nie wystarczy (chyba, że wszystkie obiekty klasy Vec będą tego samego rozmiaru; dlatego statyczne n?). Jego wewnętrzna tablica musi mieć odpowiedni rozmiar (większego z dwóch dodawanych obiektów). Różnice rozmiaru muszisz też uwzględnić w przebiegu pętli sumującej zawartość elementów.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.