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.
Kod programu:
#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("[email protected]",0);
MojaKlasa MK2(MK);
printf("%s\n", MK2.getemail(0));
MK.setemail("[email protected]",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.