Do klasy MojaKlasa (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:
- konstruktor domyślny, inicjalizujący obiekt tak, aby lista dynamiczna była pusta.
- 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.
- 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.
#include <cstdio>
#include <cstring>
using namespace std;
class MojaKlasa {
char **email;
int ile;
public:
MojaKlasa(int x);
MojaKlasa(MojaKlasa& mk); // konstruktor kopiujący
void setemail(char* adres, int idx) { strcpy(email[idx],adres); }
char* getemail(int idx) { return email[idx]; }
};
MojaKlasa:: MojaKlasa(int x) {
email = new char*[ile = x];
for (int i=0;i<ile;i++) email[i] = new char[100];
}
MojaKlasa::MojaKlasa(MojaKlasa& mk) {
email = mk.email; // czy to jest OK?
}
/*
MojaKlasa::MojaKlasa(MojaKlasa& mk) {
email = new char*[mk.ile];
ile = mk.ile;
for (int i=0;i<ile;i++) {
email[i] = new char[100];
strcpy(email[i],mk.email[i]);
}
}
*/
int main() {
MojaKlasa MK(3);
MK.setemail("k.trojanowski@uksw.edu.pl",0);
MojaKlasa MK2(MK);
printf("%s\n", MK2.getemail(0));
MK.setemail("m.mikolajczyk@uksw.edu.pl",0);
printf("%s\n", MK2.getemail(0));
return 0;
}
Nie wiem jak tworzyć takie listy dynamiczne obiektowe w C++, nie umiem zrobić tych konstruktorów.