Witam,
Mam problem, z którym nie mogę sobie poradzić ponieważ go nie rozumiem. Proszę o wskazówki i wyjaśnienie.
Najpierw kod :
#include <cstdlib>
#include <iostream>
using namespace std;
class Kategoria {
public:
int nr;
string rodzaj;
int pozycja;
int widocznosc;
void przypiszDane(string r, int p, int w) {
rodzaj = r;
pozycja = p;
widocznosc = w;
}
string wypiszDane() {
return rodzaj;
}
};
Kategoria *kategoria; // globalny wskaznik na class
int IloKat; // globalna wartosc
void dodajElement(string nazwa, int nr, int wart);
int main(int argc, char** argv) {
IloKat = 10;
kategoria = new Kategoria[IloKat + 1]; // zwiekszam zakres na potrzeby dodania dodatkowego obiektu
for (int i = 0; i < IloKat; i++) {
kategoria[i].przypiszDane("test", i, 1);
}
dodajElement("test+1", IloKat, 0);
dodajElement("test+2", IloKat, 0);
dodajElement("test+3", IloKat, 0);
return 0;
}
void dodajElement(string nazwa, int nr, int wart) {
kategoria[IloKat].przypiszDane(nazwa, nr, wart);
Kategoria *klasa_temp; // tworze tymczasowy wskaznik na clase
klasa_temp = kategoria; // przypisuje jej aktualny stan classy kategoria
delete [] kategoria;
IloKat++;
kategoria = new Kategoria[IloKat + 1]; // zwiekszam zakres na potrzeby dodania dodatkowego obiektu
kategoria = klasa_temp; // **
delete [] klasa_temp;
}
Przy próbie dodania kolejnych elementów program się wysypuje się.
**
Wydaje mi się , że jest to najważniejsza linia kodu. Ja to rozumiem tak , że jeśli mam tablice wypełnioną obiektami od 0 - 10 gdzie zaalocowaną tablice mam new Kategoria[12] to zawsze zostaje 1 "puste" miejsce na dodanie ewentualnego dodatkowego obiektu i później przeallocowanie z powrotem jej do nowej tablicy obiektów powiększonych o 1.
Jednak jak działa przypisanie jednej tablicy obiektów do drugiej? Nie powinna ona wypełnić po prostu zakres np od 0 - 10 a to 11 miejsce zostawić puste na potrzeby dalszego kodu ?
Będę wdzięczny za wyjaśnienia i pomoc.
Pozdrawiam
Jakub