Witam! Jestem początkującą osobą jeżeli chodzi o programowanie obiektowe. Tworzę prosty projekt, będący wypożyczalnią książek.
Mam klasę abstrakcyjną osoba, z której dziedziczy użytkownik, a z użytkownika administrator. Mam również abstrakcyjną klasę pozycja, z której dziedziczy książka oraz audiobook.

Mam teraz pytanie o użycie konstruktorów - na podstawie katalogu przedmiotów umieszczonego w pliku tekstowym tworzę tablice obiektów klasy książka bądź audiobook - mój konstruktor wygląda mniej więcej tak:

w klasie pozycja:

Pozycja::Pozycja (int id, string tytul, int rok_wydania)
{
this->id = id;
this->tytul = tytul;
this->rok_wydania = rok_wydania;
}

I przykładowo w klasie audiobook:

Audiobook::Audiobook (int dlugosc) : Pozycja (id, tytul, rok_wydania)
{
this->dlugosc = dlugosc;
}

Klasy dostają parametry do utworzenia obiektów z klasy zarządzającej biblioteką, w której znajduje się metoda wczytująca katalogi podczas startu programu.

No i teraz dwa pytania:

  1. Czy zrobiłem to prawidłowo? Wszystko działa tak jak powinno, no ale - czy w ten sposób się robi konstruktory w tego typu przypadkach?
  2. Czy powinienem zrobić jeszcze "domyslny" konstruktor, który tworzyłby obiekt bez otrzymywanych wartości, jeżeli nigdy bym takiego obiektu nie tworzył? mam tu na myśli coś tego typu:
Pozycja::Pozycja()
{
this->id = 0;
this->tytul = "domyslny";
this->rok_wydania = "0";
}

I druga kwestia to destruktory - czy w przypadku "usuwania" danego obiektu, będącego na przykład audiobookiem, wystarczy po prostu wywołać destruktor :

Pozycja::~Pozycja()
{
}

I obiekt zostanie usunięty, czy muszę jednak coś pomiędzy klamrami umieścić? Przepraszam za banalne pytanie, ale na internecie wszędzie są owe destruktory po prostu puste w środku. Dodam, że chodzi mi tylko o usunięcie tego obiektu z "pamięci" w danej chwili, nie chce wykonywać żadnych dodatkowych operacji.