
- •Базовые принципы объектно-ориентированного программирования.
- •Базовые конструкции объектно-ориентированных программ.
- •Конструктор и деструктор. Конструктор по умолчанию.
- •Конструктор копирования.
- •Конструктор explicit.
- •Указатель this.
- •Абстрактные типы данных.
- •Операторы для динамического выделения и освобождения памяти (new и delete).
- •Перегрузка и переопределение функций.
- •Перегрузка бинарных операторов.
- •Перегрузка унарных операторов.
- •19.20.Перегрузка оператора new.Перегрузка оператора delete.
- •22.Inline-функции.
- •23.Вложенные классы
- •24.Static-компоненты данные класса
- •25.26.Static и const-компоненты функции класса
- •27.Использование new delete для реализации массивов
- •28.Организация внешнего доступа к локальным компонентам класса(friend)
- •29.Ссылки.Параметры ссылки
- •30.Ссылки.Независимые ссылки
- •31.Инициализация компонент-данных объекта. Конструктор с параметрами.
- •33.Наследование. Открытое, защищенное и закрытое.
- •34.Виртуальные функции.
- •35.Множественное наследование.
- •36.Множественное наследование и виртуальные базовые классы
- •38.Proxi-классы.
- •39.40.Пространство имен. Пространство имен как объявление. Пространство имен как директива.
- •41.Виртуальные функции
- •42.Параметризированные классы (шаблоны).
- •43.Шаблоны функций.
- •44.Передача в шаблон класса дополнительных параметров.
- •44.Совместное использование шаблонов и наследования.
- •45.Шаблоны класса и friend.
- •46.Реализация smart-указателя.
- •48.Транзакции.
48.Транзакции.
Транзакция может быть выполнена либо целиком и успешно, соблюдая целостность данных и независимо от параллельно идущих других транзакций, либо не выполнена вообще и тогда она не должна произвести никакого эффекта.
Пример: Необходимо перевести с банковского счёта номер 5 на счёт номер 7 сумму в 10 денежных единиц. Этого можно достичь, к примеру, приведённой последовательностью действий:
Начать транзакцию( прочесть баланс на счету номер 5; уменьшить баланс на 10 денежных единиц;сохранить новый баланс счёта номер 5;прочесть баланс на счету номер 7;увеличить баланс на 10 денежных единиц; сохранить новый баланс счёта номер 7
Окончить транзакцию
Эти действия представляют из себя логическую единицу работы «перевод суммы между счетами», и таким образом, являются транзакцией. Если прервать данную транзакцию, к примеру, в середине, и не аннулировать все изменения, легко оставить владельца счёта номер 5 без 10 единиц, тогда как владелец счета номер 7 их не получит.
____________________
template <class T1>
class A
{
T1 x;
public:
void set(T1 X){x=X;}
T1 get(){return x;}
void Show(){cout<<x<<endl;}
};
template <class T2>
class Tran
{
T2 *that; //текущее значение объекта класса A
T2 *prev; //предыдущее…
public:
Tran(){prev = NULL; that = new T2;}
Tran(const Tran &obj):that(new T2(*(obj.that))),prev(NULL){}//constr copy for A
~Tran() {delete prev; delete that;}
Tran &operator = (const Tran & obj);
void Show();
void Begin_Tran(); //начать
void Commit(); //закрепить
void Del_Tran(); //отменить
T2 *operator->();
};
template <class T2>
Tran <T2> & Tran <T2>::operator = (const Tran & obj)
{
if(this!=&obj) { delete that; that = new T2(*(obj.that)); } //prev не трогаем, чтобы
return *this; // можно было сделать откат
}