Question 5 ========== a) Übersetzungsfehler. Es kann keine Instanz einer Klasse mit pure virtual functions erzeugt werden. b) okay. c) okay. d) okay. e) okay. f) okay. g) Übersetzungsfehler. Klasse E ist keine Unterklasse von I. h) okay. i) Übersetzungsfehler. Klasse C ist keine Unterklasse von D (umgekehrt). j) okay. (Der Variablen h wird der Null-Zeiger zugewiesen). k) okay. (Der Variablen h wird der Zeiger auf D-Objekt d zugewiesen). l) okay. m) okay. n) okay. o) Übersetzungsfehler. Klasse E ist keine Unterklasse von I. Question 4 ========== map< string, set > occurrences(list text) { map< string, set > map; int pos = 0; for (string word : text) { set set; auto it = map.find(word); if (it != map.end()) set = *it; set.insert(pos); map[word] = set; pos++; } return map; } Question 3 ========== template class ArrayQueue: public BoundedQueue { T* array; int length; int number; int head; int tail; void copy(const ArrayQueue& q) { length = q.length; number = q.number; head = q.head; tail = q.tail; array = new T[length]; for (int i = 0; i < length; i++) array[i] = q.array[i]; } public: ArrayQueue(int len) { array = new T[len]; length = len; number = 0; head = 0; tail = 0; } ~ArrayQueue() { delete[] array; } ArrayQueue(const ArrayQueue& q) { copy(q); } ArrayQueue& operator(const ArrayQueue &q) { delete[] array; copy(q); } bool isempty() { return number == 0; } bool isfull() { return number == length; } void put(T& elem) { array[tail] = elem; tail = (tail+1)%length; // tail++; if (tail == length) tail = 0; number++; } T get() { T elem = array[head]; head = (head+1)%length; number--; return elem; } }; Question 2 ========== int printSongs(Archive* archive, int year, string interpreter) { int len = 0; int n = archive->size(); for (int i = 0; i < n; i++) { Album* album = archive->album(i); int year0 = album->year(); if (year0 != year) continue; int len0 = printAlbum(album, interpreter); len += len0; } return len; } int printAlbum(Album* album, string interpreter) { int len = 0; string title = album->title(); int n = album->size(); for (int i = 0; i < n; i++) { Song* song = album->song(i); string interpreter0 = song->interpreter(); if (interpreter0 != interpreter) continue; cout << title << ": " << song->title() << endl; len += song->length(); } return len; } Question 1 ========== class Work { int cents; int min; public: Work(int c, int m = 0): cents(c), min(m) { } /* Work(Work &w): cents(w.cents), min(w.min) { } */ void add(int m) { min += m; } void printSalary() const { int total = cents*min; cout << (total/100) << ","; int c = total%100; if (c < 10) << "0"; cout << c; } bool subtract(int m) { if (min < m) return false; min -= m; return true; } static void reset (Work& w) { w.min = 0; } void reset() { /* this-> */ min = 0; } int compare(Work w) { int t1 = cents*min; int t2 = w.cents*w.min; if (t1 == t2) return 0; if (t1 < t2) return -1; return 1; } };