Лекция 18. Повторение и введение в STL (часть 1) Красс Александр СПбГУ ИТМО, 2008
2 Темы Чуть-чуть повторения Введение в STL (класс string) Практика
3 Помни о прошлом! class A { int *i; public: A() { i = new int(5); } virtual void foo() { cout << "A::foo()\n"; } virtual ~A() { delete i; foo(); } }; class B : public A { int *j; public: B() { j = new int(7); } virtual void foo() { cout << "B::foo()\n"; } virtual ~B() { delete j; foo(); } }; void main() // Что мы увидим { // на экране? A *a = new B; delete a; }
4 Помни о прошлом! class A { int *i; public: A() { i = new int(5); } virtual void foo() { cout << "A::foo()\n"; } virtual ~A() { delete i; foo(); } }; class B : public A { int *j; public: B() { j = new int(7); } virtual void foo() { cout << "B::foo()\n"; } virtual ~B() { delete j; foo(); } }; void main() // B::foo() { // A::foo() A *a = new B; delete a; }
Наш класс String class String { public: String(const char* s = NULL); // Конструктор String(const String& s); // Конструктор копирования ~String (); // Деструктор String& operator= (const String& s); // Присваивание String operator+ (const String& s); // Конкатенация char& operator[] (int element); // Оператор индексации friend ostream& operator<< (ostream& os, String& s); // Вывод в поток int Length () const; // Длина operator const Char*() const; // Преобразование типа char * ToChars(); // Возвращает поле класса data private: char* data; }; 5
std::string Очень похож на наш класс String. Умеет намного больше. Пишем в поисковике std string и происходит чудо! 6
Задание Всем известно, что инопланетяне из солнечной системы «Большие редиски» несколько десятков тысяч лет используют нашу планету как свалку своих отходов. А Вы думали откуда такая наука была в древнем Египте, Китае? Просто в учебниках для детского сада этих самых пришельцев много полезных картинок. А почему погибла Атлантида? Думаю, что Вы уже догадываетесь. К счастью, у них почти всё идёт на переработку. 7
Задание Пришельцы иногда сбрасывают очень полезные высокотехнологичные вещи, иногда даже почти исправные (как в случае с Атлантидой). 8
Задание Вы работник сверхсекретного подразделения по борьбе с инопланетным мусором «Люди в чёрном». За великолепный послужной список Вас перевели на несколько месяцев в отдел разработки ПО Вашей организации. Вам дали задание написать часть прототипа тренажёра организации работы с инопланетным мусором (по готовому тренажёру будут обучать новичков).
Задание Схема Вашей части мусора оборота: 1. В специальный отдел временного хранилища поступает некоторое число единиц мусора. 2. Каждая единица должна поступить в отдел оценки. 3. По окончанию работы с единицей мусора в отделе оценки составляется документ, содержащий заключение о ценности и способе использования этой единицы. Далее единица мусора поступает во временное хранилище. 4. В любой момент один из отделов, занимающийся исследованием, использованием или утилизацией инопланетного мусора может попросить прислать со склада все вещи соответствующие некоторому описанию, которое содержится в документе, сформированном отделом оценки. Эти отделы никогда не возвращают взятые единицы мусора назад во временное хранилище. 10
Задание Единица мусора, которая поступает в п.1 – это экземпляр класс std::string, содержащий набор букв A и B. Если единица мусора, поступившая в распоряжение отдела оценки содержит три идущих подряд буквы A, то она считается объектом, подлежащим исследованию; если содержит не более двух идущих подряд букв A, то считается бесполезной и подлежит утилизации; если содержит две идущих подряд буквы A и букв B больше чем букв A, то считается, что элемент мусора не может быть использован на данном этапе развития науки и поступает в распоряжение отдела длительного хранения. В п. 4 подразумевается, что любой отдел может потребовать все вещи из временного хранилища соответствующие одному из классов, перечисленных выше. 11
Требования По окончанию работы отдела оценки над единицей мусора ей должен соответствовать экземпляр одного из классов: ResearchableItem, UtilizableItem, UnknownItem. Эти классы являются наследниками класса Item. Элементы мусора во временном хранилище находятся в массиве указателей на класс Item длины 100. Ваш начальник – просто зверюга! Он заставляет использовать для всех сущностей (отдел оценки, отдел временного хранения и т.п.) отдельные классы. 12
Если не успели на занятии, то задание придётся доделать дома к следующему разу! Спасибо за внимание! 13