- •6Vpj7-h3cxh-hbtpt-x4t74-3yvy7
- •Оглавление
- •Предисловие
- •Введение
- •1.1. Понятие класса и объекта. Инкапсуляция
- •1.2. Определение классов. Компоненты. Доступность
- •Class_key /*class_id*/ { /*members_list*/ };
- •Value_type class_id::function_id(parameters) {statements}
- •CPoint point1(100,70); // локальный объект
- •Static cPoint point3(50,120); // статический объект
- •Class_id(parameters) /*:initializer_list*/ {/*statements*/}
- •CString(const char *);
- •Delete[] __thematrix;
- •1.4. Обращение к компонентам объектов
- •1.5. Статические и нестатические компоненты классов
- •1.7. Указатель this
- •В опросы для самопроверки
- •2. Механизм наследования. Полиморфизм
- •2.1. Формы наследования. Базовые и производные классы
- •Class_key class_id: inheritance_specifier base_class_id {member_list};
- •2.3. Абстрактные классы
- •2.4. Множественное наследование и виртуальные классы
- •2.5. Преобразование динамических типов. Динамическая идентификация типов
- •Catch ( std::bad_cast & ) { // обработка исключения
- •Return 0;
- •Вопросы для самопроверки
- •3. Дружественные функции и классы
- •3.1. Дружественные функции
- •3.2. Дружественные классы
- •Вопросы для самопроверки
- •4. Механизм вложения
- •4.1. Вложенные классы
- •4.2. Локальные классы
- •Вопросы для самопроверки
- •5. Объектная модель и шаблоны
- •5.1. Определение, описание и инстанцирование шаблонов
- •::Function_id(function_parameter_list) { statements }
- •5.2. Параметры и аргументы шаблонов
- •Class identifier typename identifier
- •// Key, Data – параметры-типы (типы ключа и данных отображения)
- •// Container – контейнер, где содержится информация отображения class сMap {
- •Class MyTemplate
- •Int array[10]; struct Structure { int m; static int sm; } str;
- •5.3. Шаблоны компонентных функций
- •Value_type function_template_id(function_parameter_list) { statements }
- •::Function_template_id(function_parameter_list) { statements }
- •5.4. Специализация шаблонов
- •Вопросы для самопроверки
- •6. Перегрузка операций
- •Value_type operator @ (parameter_list);
- •Value_type operator @ (parameter_list) { statements }
- •Return fail();
- •6.3. Перегрузка бинарных операций
- •Value_type operator @ (parameter); // компонентная функция
- •Value_type operator @ (parameter, parameter); // глобальная функция friend value_type operator @ (parameter, parameter); // дружественная функция
- •Return *this;
- •Return *this;
- •/* Присваиваем собственные данные класса d */
- •6.4. Перегрузка операций управления памятью
- •Typedef void (*new_handler) ();
- •Extern new_handler set_new_handler( new_handler new_p );
- •Void operator delete(void * memory) {
- •... // Специальная обработка пользователя ::operator delete(memory); // освободить память
- •Вопросы для самопроверки
- •7. Механизм исключений
- •Throw expression
- •7.3. Специальные средства поддержки механизма исключений
- •Unexpected_function set_unexpected(unexpected_function func_name);
- •Typedef void (* unexpected_function) ();
- •Extern char * __throwExceptionName; extern char * __throwFileName; extern unsigned __throwLineNumber;
- •Вопросы для самопроверки
- •8. Подсчет ссылок
- •8.1. Назначение механизма подсчета ссылок
- •8.2. Контекстно-независимая модель счетчика ссылок
- •8.4. Внедрение подсчета ссылок в существующий класс
- •Вопросы для самопроверки
- •9. Стандартная библиотека шаблонов (stl)
- •9.1. Назначение и архитектура stl
- •9.2. Последовательные контейнеры
- •Class vector {
- •// Определение итераторов
- •Sort(first,last); // сортировка вектора в диапазоне итераторов
- •Ifstream ifile ("example.In"); ofstream ofile ("example.Out");
- •OutputIterator copy(
- •InputIterator first, InputIterator last, OutputIterator result );
- •// Заполнение списка
- •Operator- (int)
- •Operator- (random access iterator) operator[] (int)
- •InputIterator find(InputIterator first, InputIterator last, const t & value);
- •InputIterator find(InputIterator first, InputIterator last, const t & value)
- •Return first;
- •OutputIterator copy (InputIterator first, InputIterator last, OutputIterator result)
- •Return result;
- •OutputIterator transform (InputIterator first, InputIterator last, OutputIterator result, UnaryOperation op)
- •Return result;
- •Void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp)
- •__Quick_sort_loop(first, last, comp); __final_insertion_sort(first, last, comp);
- •T accumulate(InputIterator first, InputIterator last, t init, Function f);
- •V.Push_back(2); V.Push_back(5);
- •9.5. Функторы
- •T operator()(const t & X) const { return -X; }
- •9.7. Адаптеры
- •S1.Push(1); s1.Push(5);
- •// Записать в вектор числа 1 2 3 4
- •// Сортировать по неубыванию
- •// Записать в вектор числа 4 6 10 3 13 2
- •Вопросы для самопроверки
- •Заключение
- •Библиографический Список
- •6Vpj7-h3cxh-hbtpt-x4t74-3yvy7
МИНИСТЕРСТВО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ
Курский государственный технический университет
И.В. Зотов, Т.А. Ширабакина
РАЗРАБОТКА ПРОГРАММ НА С++ ТЕОРИЯ, ПРИМЕРЫ РЕШЕНИЯ ЗАДАЧ, ЭФФЕКТИВНОСТЬ
Рекомендовано УМО по образованию в области автоматики, электроники, микроэлектроники и радиотехники в качестве учебного пособия для студентов вузов по направлению подготовки 551100 «Проектирование и технология электронных средств» и по специальности 220500 «Конструирование и технология ЭВС»
6Vpj7-h3cxh-hbtpt-x4t74-3yvy7
Курск 2003
УДК 681.3
ББК В 185.2
З – 88
Рецензенты:
Доктор технических наук, профессор Курского государственного медицинского университета В.Н.Лопин
Кандидат технических наук, доцент Курского государственного университета А.П.Жмакин
Зотов И.В., Ширабакина Т.А. Разработка программ на С++. Теория, примеры решения задач, эффективность: Учеб. пособие / Курск. гос. техн. ун-т. Курск, 2003. 162 с.
Учебное пособие соответствует Государственным образовательным стандартам специальностей 220100, 220400 и 220500.
В учебном пособии излагаются основы объектно-ориентированной разработки программ на языке С++, затрагиваются все основные аспекты такой разработки: от построения независимых классов до создания классовых иерархий с множественным наследованием и шаблонных классов. Особое внимание уделяется вопросам эффективности программ, которые недостаточно глубоко освещаются во многих книгах и учебных пособиях по С++.
Изложение материала сопровождается множеством примеров из различных предметных областей. Все примеры протестированы в интегрированной среде Borland C++ Builder 5.0. В конце каждого раздела дается список вопросов для самопроверки и несколько задач для самостоятельного решения.
Предназначено для студентов, обучающихся по специальностям 220100, 220400 и 220500.
Ил. 9. Библиогр.: 8 назв.
УДК 681.3
ББК В 185.2
З – 88
Зотов И.В., Ширабакина Т.А., 2003
Курский государственный технический университет, 2003
Оглавление
Введение
Объектная модель С++. Классы и объекты.
Понятие класса и объекта. Инкапсуляция.
Определение классов. Компоненты. Доступность.
Создание и уничтожение объектов. Конструкторы и деструкторы.
Обращение к компонентам объектов.
Статические и нестатические компоненты классов.
Функции, сохраняющие и не сохраняющие константность объекта.
Указатель this.
Вопросы для самопроверки.
Задачи.
Механизм наследования. Полиморфизм.
Формы наследования. Базовые и производные классы.
Виртуальные и невиртуальные функции. Полиморфизм.
Абстрактные классы.
Множественное наследование и виртуальные классы.
Преобразование динамических типов. Динамическая идентификация типов.
Вопросы для самопроверки.
Задачи.
Дружественные функции и классы.
Дружественные функции.
Дружественные классы.
Вопросы для самопроверки.
Задачи.
Механизм вложения.
Вложенные классы.
Локальные классы.
Вопросы для самопроверки.
Задачи.
Объектная модель и шаблоны.
Определение, описание и инстанцирование шаблонов.
Параметры и аргументы шаблонов.
Шаблоны компонентных функций.
Специализация шаблонов.
Вопросы для самопроверки.
Задачи.
Перегрузка операций.
Назначение перегрузки операций и ее реализация в С++.
Перегрузка унарных операций.
Перегрузка бинарных операций.
Перегрузка операций управления памятью.
Вопросы для самопроверки.
Задачи.
Механизм исключений.
Модель исключений в С++. Синтаксис и семантика обработки исключений.
Спецификации исключений.
Специальные средства поддержки механизма исключений.
Вопросы для самопроверки.
Задачи.
Подсчет ссылок.
Назначение механизма подсчета ссылок.
Контекстно-независимая модель счетчика ссылок.
Внедрение подсчета ссылок в новый класс.
Внедрение подсчета ссылок в существующий класс.
Вопросы для самопроверки.
Задачи.
Стандартная библиотека шаблонов (STL).
Назначение и архитектура STL.
Последовательные контейнеры.
Итераторы.
Алгоритмы.
Функторы.
Ассоциативные контейнеры.
Адаптеры.
Аллокаторы.
Вопросы для самопроверки.
Задачи.
Список литературы.