PO2020: Wejściówka na Lab.10

Do klasy MojaKlasa (https://troja.uksw.edu.pl/programowanie-obiektowe/kody-programow/: Program #6) dodaj pole nast, tak aby można było tworzyć listę dynamiczną jednokierunkową obiektów typu MojaKlasa.

Następnie zaprojektuj nową klasę Wykladowca, która zawiera pole typu MojaKlasa* wskazujące na listę dynamiczną jednokierunkową. Pole to ma pełnić rolę głowy dynamicznej listy grup studenckich przypisanych do danego wykładowcy. Klasa Wykladowca może też zawierać inne pola, jeżeli okażą się potrzebne.

Do klasy Wykladowca dodaj konstruktory:

  1. konstruktor domyślny, inicjalizujący obiekt tak, aby lista dynamiczna była pusta.
  2. konstruktor z argumentem reprezentującym nazwę pliku tekstowego. Plik zawiera listę kilku adresów e-mail. Konstruktor tworzy jeden obiekt dynamiczny typu MojaKlasa, do którego zostają zapisane adresy e-mail odczytane z pliku. Następnie obiekt ten jest dołączany do listy dynamicznej.
  3. konstruktor kopiujący, który tworzy kopię listy dynamicznej z obiektu podanego w argumencie wywołania.

oraz destruktor, który zwalnia wszystkie dynamicznie zaalokowane zasoby.

Do klasy Wykladowca dodaj metodę dodaj_klase dodającą nowy obiekt do listy dynamicznej. Argumentem wywołania metody jest nazwa pliku tekstowego z listą adresów mailowych. W metodzie tworzony jest nowy obiekt dynamiczny typu MojaKlasa, zapisywane są w nim adresy mailowe ze wskazanego pliku, a na koniec obiekt jest dołączany do listy.

Do klasy Wykladowca dodaj też metodę wypisz, która wypisuje w oknie konsoli wszystkie grupy studenckie przypisane do danego wykładowcy, tj. dla każdego elementu listy dynamicznej wypisuje wszystkie zapisane w nim niepuste adresy mailowe.

Zademonstruj działanie napisanego kodu: w funkcji main utwórz obiekty dynamiczne typu Wykladowca z wykorzystaniem wszystkich trzech konstruktorów, do wybranego z wykładowców dodaj kilka nowych grup studenckich (metodą dodaj_klase), po czym dla każdego z wykładowców wywołaj metodę wypisz. Na koniec usuń obiekty dynamiczne typu Wykladowca, przy czym z pomocą debuggera upewnij się, że destruktor za każdym razem prawidłowo zwolnił wszystkie dynamicznie zaalokowane zasoby.

Sprawdź, ile razy w napisanym programie zostały wywołane konstruktory, które i w których miejscach kodu to nastąpiło. A ile razy zostały wywołane destruktory? Odpowiedź na to pytanie napisz w komentarzu do funkcji main w kodzie programu. Aby ułatwić sobie napisanie tej odpowiedzi, możesz powstawiać zakomentowane znaczniki (np. //z1, //z2 ..) w tych miejscach, gdzie twoim zdaniem są wywoływane konstruktory i destruktory, a potem odwołać się do nich w odpowiedzi.

Hint: na zajęciach lab. 10 będzie trzeba rozbudować kod programu napisanego na lab.9. Dlatego warto przejrzeć dotychczas napisany kod i usunąć wszystkie ewentualne błędy i niedoróbki.