Witam
Ćwiczę ostatnio programowanie obiektowe w c++ i zrobiłem bazę danych jakichś ludzi przechowywaną w liście dwukierunkowej. Program oczywiście się kompiluje, ale nie mam pojęcia jak dorobić do nie destruktory, mam też kilka wątpliwości co do składni, które umieściłem w komentarzach w kodzie. Ogólnie mam wrażenie, że kod jest jakiś "nieelegancki" czekam na wszelkie sugestie.
#include <iostream>
#include <string>
using namespace std;
//tutaj muszę zadeklarować klasę osoba, by klasa lista mogla tworzyc zmienne tego typu,
//jesli odwroce kolejnosc deklaracji to klasa osoba nie bedzie wiedziala co ma dziedziczyc
class osoba;
class lista {
protected:
osoba * nastepnaOsoba;
osoba * poprzedniaOsoba;
lista(osoba * a, osoba * b):
poprzedniaOsoba(a), nastepnaOsoba(b) {}
~lista() {
delete poprzedniaOsoba;
delete nastepnaOsoba;
}
};
class osoba : protected lista {
string imie;
string nazwisko;
public:
osoba(string * t, osoba * a = NULL, osoba * b = NULL):
imie(t[0]), nazwisko(t[1]), lista(a, b) {}
osoba * nowaOsoba(string *);
// przy probie usuniecia tego wskaznika wyskakuje
//31 [Error] type '<unresolved overloaded function type>' argument given to 'delete', expected pointer
~osoba() {
osoba * p = this;
while (p != NULL) {
cout << p->imie << ' ' << p->nazwisko << endl;
p = p->poprzedniaOsoba;
}
delete p;
}
};
osoba * osoba::nowaOsoba(string * t) {
osoba * o = new osoba(t, this, NULL);
this->nastepnaOsoba = o;
return o;
}
void dane(string *t) {
string a, b;
cout << "Wpisz imie i nazwisko" << endl;
cin >> a;
cin >> b;
t[0] = a;
t[1] = b;
}
int main() {
string temp[2];
dane(temp);
osoba * o = new osoba(temp);
char c;
cout << "Czy chcesz dodac nastepna osobe (t/n)" << endl;
cin >> c;
// by petla zadzialala musze jeszcze raz przepisac to samo, mozna to jakos ominac?
while (c == 't') {
dane(temp);
o = o->nowaOsoba(temp);
cout << "Czy chcesz dodac nastepna osobe (t/n)" << endl;
cin >> c;
}
delete o;
return 0;
}
Z góry dziękuje za pomoc
Pozdrawiam dagi12