- •Структура платформы .NET
- •Схема выполнения программы в .NET
- •Схема работы компиляторов .NET
- •Достоинства языка С++
- •Структура программы
- •Модификаторы памяти
- •Пространство имен
- •Константы
- •Описание идентификаторов
- •Операции С++
- •Правила преобразования типов
- •Функции
- •ПЕРЕГРУЗКА ФУНКЦИЙ
- •Неоднозначность перегрузки
- •Шаблоны функций
- •Явная спецификация типов
- •Оперативная память
- •В адресном пространстве каждого процесса содержится:
- •Виртуальная память может находиться в трех состояниях
- •Средства защиты памяти
- •Страничное преобразование
- •ПРИМЕР РАБОТЫ С УКАЗАТЕЛЯМИ
- •Еще один пример с указателями
- •Утечки памяти
- •Процесс сборки мусора
- •Сборка мусора. Поколения объектов
- •Особенности ОС Windows
- •Процесс и поток
- •Очереди сообщений
- •Структура сообщения
- •Cпособы создания интерактивных Win приложений в VS C++
- •Функция WinMain
- •Создание окна
- •Функция окна
- •Цикл обработки сообщения
- •Определение запущенной копии приложения
- •Пример приложения
- •Команды передачи данных
- •Арифметические команды:
- •Каркас программы
- •Стековый фрейм
- •Парадигмы программирования
- •Элементы объектной модели
- •Преимущества объектной модели
- •Ограничения доступа
- •Спецификатор памяти static
- •Спецификатор const
- •Указатель this
- •Дружественные функции
- •Основные свойства и правила использования спецификатора friend:
- •Наследование
- •Основные правила использования базовых и производных классов:
- •Наследование атрибутов компонентов базового класса:
- •Множественное наследование
- •Использование виртуального класса
- •Полиморфизм
- •ПРОЦЕСС
- •Структура процесса
- •Поток (thread)
- •Создание и работа с потоками
- •Создание потока
- •Завершение потока
- •Совместимость потоков и стандартной библиотеки
- •Синхронизация потоков ПРИМЕР1
- •Как можно приостановить работу потока?
- •ПРИМЕР 2
- •Объекты синхронизации
- •Мьютекс. ПРИМЕР3
- •Критические секции ПРИМЕР4
- •События. ПРИМЕР5
- •Семафоры. ПРИМЕР6
- •Структура описания технологической операции
- •Типы программ
- •Жизненный цикл программного обеспечения
- •Структура процессов ЖЦПО
- •Стратегии конструирования ПО
- •Водопадная модель ЖЦПО
- •Макетирование
- •Спиральная модель БОЭМА
- •Инкрементальная модель
- •Модель быстрой разработки приложений (RAD)
- •Схема процесса XP.
- •Эксплуатационные требования к программным продуктам
Использование виртуального класса
class gen1 : virtual public base{...}; classgen2 : virtual public base{...}; classglobal : publicgen1, publicgen2
{…} ex;
base
gen1 |
gen2 |
global
Формально конструкторкласса global будет иметь вид:
global::global() : base(), gen1(), gen2() {...}
Полиморфизм
class Base |
|
|
{ |
public: |
|
virtual |
int f(const int &d) ; |
|
int CallFunction(const int &d) |
||
}; |
{ return f(d)+1; |
} |
|
|
|
class Derived: public Base |
||
{ |
public: |
|
virtual |
int f(const int &d) |
|
|
{ returnd*d; } |
|
};
int main()
{ Base a;
cout << a.CallFunction(5)<< endl; Derived b;
cout << b.CallFunction(5)<< endl; return();
}
class Clock { public:
virtual void print() const { cout << "Clock!" << endl; }
};
class Alarm: public Clock { public:
virtual void print() const { cout << "Alarm!" << endl; }
};
void settime(Clock&d) { d.print(); }
ClockW; settime(W); AlarmU; settime(U); Clock*c1 = &W; c1->print();
c1 = &U;
c1->print(); }
((Alarm *)c1)->print();
Правила описания и использования виртуальных функций:
1.Виртуальная функция может бытьтолько методом класса.
2.Любуюперегружаемуюоперацию-метод классаможно сделать виртуальной.
3.Виртуальная функция, каки самавиртуальность, наследуется.
4.Виртуальная функция может быть константной.
5.Если в базовом классевпервыеобъявлена виртуальная, то функция должна бытьлибо чистой (virtual int f(void) = 0;), либодля неедолжно быть заданоопределение.
6.Если в базовом классеопределенавиртуальная функция, то метод производного классастакими жеименем и прототипомавтоматически является виртуальным.
7.Конструкторы не могут быть виртуальными.
8.Статическиеметоды не могут быть виртуальными.
9.Деструкторы могут (чаще — должны) быть.
10.Если некоторая функция вызывается с использованием ее полного имени, то виртуальный механизм игнорируется.
Вызов виртуальной функции может не являться виртуальным в некоторых случаях:
Вызывается нечерез указательили ссылку: global object;
object.f();
Вызываетсячерез указательили ссылку, но с уточнением имени класса:
base * p; |
|
global object; |
|
p = &object; |
|
p->f(); |
// виртуальный вызов |
p->global::f(); |
// не виртуальный вызов |
вызывается в конструктореили деструкторебазового класса.