- •1.Конструктор копирования
- •2.Перегрузка переопределение функц
- •3.Перегрузка бинарных операторов
- •4.Перегрузка унарных операторов
- •5.Static- и Const- компоненты класса
- •6.Организация внешн.Доступа к лок.Комп. Класса(Спецификатор friend)
- •7.Proxi-классы
- •8.Наследование простое
- •9.Множественное наследование
- •10.Виртуальные функции
- •11.Абстрактные классы
- •13.Шаблоны.Параметрезированные классы
- •12.Виртуальный деструктор
- •14.Совместное использование шаблонов и наследование
- •15.Реализация smart-указателя
- •16.Классы поддерживающие транзакцию
- •17.Преобразование типа.Явное преобразование типа
- •18.Преобразование типов определённых в программе
- •20.Строковые потоки,их свойства,назначение.
- •22.Организация файла последовательного доступа
- •24.Генерация исключений в конструкторах.Иерархия искл.В станд.Библиотеке
- •23.Организация файла произвольного доступа
- •25. Спецификации исключительных ситуаций
- •27. Исключительные ситуации.Основы обработки исключительных ситуаций
- •28. Задание собственного неожиданного обработчика
- •29. Исключительная ситуация, генерируемая оператором new
- •30. Перенаправление исключительных ситуаций
- •31.Категории итераторов.Основные итераторы
- •32. Категории итераторов.Основные итераторы
- •33.Пасивные и активные итераторы
- •34. Контейнеры последовательностей
- •35.Ассоциативные контейнеры
- •36.Адаптеры контейнеров
- •37.Патеррн (Абстрактная фабрика)
- •38.Патеррн (Строитель)
- •39. Патеррн (Адаптер)
- •40.Патеррн (Команда)
- •41.Спецификатор final в java
- •42.Вложенные и внутренние классы в java
- •43.Основы наследования в java
- •47.Абстрактные классы в java
- •44.Использование ключевого слова super в java
- •50.Интерфейсы в java
- •51.Множественное наследование в java
- •52.Конфликты имён при комбинировании интерфейсов в java
- •53.Расширение интерфейса в java
- •54. Исключительные ситуации. Обработка исключений java
12.Виртуальный деструктор
Практически всегда деструктор делается виртуальным. Делается это для того, чтобы корректно (без утечек памяти) уничтожались объекты не только заданного класса, а и любого производного от него.
class Father{public: Father() {} virtual ~Father() {} };
class Son : public Father{private: int* buffer;public:
Son() : Father() { buffer = new int[1024]; }
virtual ~Son() { delete[] buffer; }};
т 7 8 }
return 1; }
14.Совместное использование шаблонов и наследование
Шаблоны и наследование представляют собой механизмы повторного использования кода и могут включать полиморфизм. Шаблоны и наследования связаны между собой следующим образом: – шаблон класса может быть порожден от обычного класса; – шаблонный класс может быть производным от шаблонного класса; – обычный класс может быть производным от шаблона класса.
emplate <class T> class vect {protected: T *ms; int size; public: vect(int n) : size(n) { ms=new T[size];}
~vect(){delete [] ms;} T &operator[](const int ind)
{ if((ind>0)&&(ind<size))return ms[ind];else return ms[0];}};
template <class T> class oper : public vect<T>
{ public: oper(int n): vect<T>(n) {} ~oper(){}
void print(){ for(int i=0;i<size;i++) cout<<ms[i]<<' '; cout<<endl; } };void main()
{ oper <int> v_i(4); oper <double> v_d(4);
v_i[0]=5;v_i[1]=3;v_i[2]=2;v_i[3]=4;v_d[0]=1.3;v_d[1]=5.1;
v_d[2]=.5;v_d[3]=3.5;cout<<"int вектор = "; v_i.print();
cout<<"double вектор = ";v_d.print(); }
15.Реализация smart-указателя
Умный указатель (smart pointer) — класс (обычно шаблонный), имитирующий интерфейс обычного указателя и добавляющий некую новую ункциональность, например проверку границ при доступе или очистку памяти. Умные указатели (Smart pointers) - это, объекты, которые хранят указатели на динамическую память. Они действуют аналогично обычным указателям C++, за исключением того, что автоматически освобождают память в необходимый момент.
Если при использовании в программе указателя на объект, память для которого выделена с помощью оператора new, объект становится не нужен, то для его разрушения необходимо явно вызвать оператор delete. В то же время на один объект могут ссылаться множество указателей и, следовательно, нельзя однозначно сказать, нужен ли еще этот объект или он уже может быть уничтожен. Рассмотрим пример реализации класса, для которого происходит уничтожение объектов, в случае если уничтожается последняя ссылка на него. Это достигается тем, что наряду с указателем на объект хранится счетчик числа других указателей на этот же объект. Объект может быть уничтожен только в том случае, если счетчик ссылок станет равным нулю.
16.Классы поддерживающие транзакцию
Транзакция — в информатике, группа последовательных операций, которая представляет собой логическую единицу работы с данными. Транзакция может быть выполнена либо целиком и успешно, соблюдая целостность данных и независимо от параллельно идущих других транзакций, либо не выполнена вообще и тогда она не должна произвести никакого эффекта.
Транзакция - это операция или набор операций, которые либо все будут произведены успешно, либо ни одна из них не будет применена. Если транзакция завершилась успешно, то все ее операции будут применены к данным хранилища. Если в процессе транзакции произошла хотя бы одна ошибка, то ни одна из ее операций не будет применена.Этот пример демонстрирует процесс использования транзакций: увеличение существующего числового значения свойства объекта.
def increment_counter(key, amount):obj = db.get(key)
obj.counter += amount obj.put()
Этот код требуется выполнять в рамках одной транзакции, так как между операциями db.get(key) и obj.put() может произойти изменение объекта другим пользователем. Без использования транзакции запрос пользователя будет использовать значение obj.counter до его изменения и операция obj.put() перезапишет последнее. Исполнение этого кода в рамках транзакции гарантирует, что объект не будет изменен между двумя обращениями к хранилищу. Если объект изменяется в результате другой транзакции, то она будет повторена несколько раз, до тех пор, пока все ее операции не будут проведены успешно.