- •А.Ю. Быков
- •Быков Александр Юрьевич
- •Подхода
- •Оглавление
- •Введение
- •1. Лабораторная работа № 1. Изучение диалоговых окон и элементов управления в Win api
- •1.1. Цель и задачи работы, требования к результатам ее выполнения
- •1.2. Краткая характеристика объекта изучения
- •1.2.1. Классификация диалоговых окон
- •1.2.2. Окна сообщений
- •1.2.3. Создание модального диалогового окна
- •1.2.4. Элементы управления диалогового окна
- •Кнопка, контрольный переключатель, радио кнопка
- •Текстовое поле
- •Примеры
- •Примеры посылки сообщений списку
- •1.3. Задачи и порядок выполнения работы
- •Пример выполнения работы
- •1.4. Форма отчета по лабораторной работе
- •1.5. Вопросы для самоконтроля
- •2.1. Цель и задачи работы, требования к результатам ее выполнения
- •2.2. Краткая характеристика объекта изучения
- •2.2.1. Понятие класса и объекта
- •2.2.2. Доступность компонент класса
- •2.2.3. Основные элементы класса Компонентные данные и функции класса
- •Конструктор класса
- •Деструктор класса
- •2.3. Задачи и порядок выполнения работы
- •Пример выполнения работы
- •2.4. Форма отчета по лабораторной работе
- •2.5. Вопросы для самоконтроля
- •3.1. Цель и задачи работы, требования к результатам ее выполнения
- •3.2. Краткая характеристика объекта изучения
- •3.3. Задачи и порядок выполнения работы
- •Пример выполнения работы
- •3.4. Форма отчета по лабораторной работе
- •4.2.3. Особенности конструкторов при наследовании
- •4.2.4. Особенности деструкторов при наследовании
- •4.2.5. Переопределение функций. Виртуальные функции
- •4.3. Задачи и порядок выполнения работы
- •Пример выполнения работы
- •4.4. Форма отчета по лабораторной работе
- •5.3. Задачи и порядок выполнения работы
- •Пример выполнения работы
- •5.4. Форма отчета по лабораторной работе
- •6.2.2. Создание потока с помощью api – функций
- •6.2.3. Синхронизация потоков
- •1. Взаимное исключение.
- •3. Семафор
- •4. Событие
- •6.2.4. Синхронизация процессов
- •6.3. Задачи и порядок выполнения работы
- •Пример выполнения работы
- •6.4. Форма отчета по лабораторной работе
- •6.5. Вопросы для самоконтроля
- •7. Лабораторная работа № 7. Изучение библиотеки классов mfc
- •7.1. Цель и задачи работы, требования к результатам ее выполнения
- •7.2. Краткая характеристика объекта изучения
- •7.2.1. Обзор упрощенной иерархии классов библиотеки mfc
- •7.2.2. Состав простейшего приложения в mfc
- •7.2.3. Обработка сообщений в mfc
- •Некоторые функции обработчики
- •7.2.4. Вывод графики в mfc
- •Графические объекты
- •Добавление обработчиков сообщений и событий в однодокументном приложении
- •Вывод графики и перерисовка
- •7.3. Задачи и порядок выполнения работы
- •Пример выполнения работы
- •7.4. Форма отчета по лабораторной работе
- •7.5. Вопросы для самоконтроля
- •8. Лабораторная работа № 8. Изучение разработки приложений для платформы Microsoft .Net с использование библиотеки классов .Net Framework
- •8.1. Цель и задачи работы, требования к результатам ее выполнения
- •8.2. Краткая характеристика объекта изучения
- •8.2.1. Обзор платформы Microsoft .Net
- •8.2.2. Единая среда исполнения
- •8.2.4. Понятие управляемого кода
- •8.2.6. Система общих типов
- •8.2.7. Обзор библиотеки классов .Net Framework
- •8.2.8. Класс Form
- •8.2.9. Обработка событий
- •8.2.10. Основные элементы управления
- •8.4. Форма отчета по лабораторной работе
- •8.5. Вопросы для самоконтроля
- •Заключение
- •Рекомендуемые источники
- •Приложение а. Варианты заданий для выполнения лабораторных работ Варианты заданий для лабораторной работы № 1
- •Варианты заданий для лабораторной работы № 2
- •Варианты заданий для лабораторной работы № 3
- •Варианты заданий для лабораторной работы № 4
- •Варианты заданий для лабораторной работы № 5
- •Варианты заданий для лабораторной работы № 6
- •Часть I
- •Часть II
- •Варианты заданий для лабораторной работы № 7
- •Варианты заданий для лабораторной работы № 8
Пример выполнения работы
Для решения задачи в среде Microsoft Visual Studio 2013 было создано стандартное консольное приложение (проект типа Win32 Console Application). Исходные коды основного файла проекта (файла с расширением .cpp) и файла stdafx.h приведены ниже.
Листинг программы с комментариями:
// Project3.cpp: определяет точку входа для консольного приложения.
//
#include "stdafx.h"
class Vector // Класс- вектор
{
double *p; // Указатель на массив (вектор)
int n; // Размерность вектора (число элементов) массива
public:
Vector(double *p, int n) // Коструктор на входе массив, задающий вектор
{
this->n = n; // Задаем число элементов
this->p = new double[n]; // Выделяем память
for (int i = 0; i<n; i++) this->p[i] = p[i]; // Копируем один массив в другой
}
void print() // Печать вектора (массива)
{
cout << "\n";
for (int i = 0; i<n; i++)
cout << p[i] << " ";
}
Vector() { p = 0; n = 0; } // Конструктор без параметров, задает "пустой" объект
double& operator[](int index) // Оператор- функция (перегрузка операции
// обращения к элементу)
{
return p[index];
}
Vector & operator =(Vector& v2) // Оператор- функция копирования объекта
{
n = v2.n;
p = new double[n];
for (int i = 0; i<n; i++) p[i] = v2.p[i];
return *this;
}
~Vector() // Деструктор
{
if (n>0) delete[] p; // Освобождаем память
}
friend Vector & operator *(double x, Vector& v2); // Дружественная функция,
// определенная вне класса
};
// Умножение числа на вектор (первый операнд не объект класса,
// функция обязательно определяется вне класса)
Vector & operator *(double x, Vector& v2) // Оператор- функция вне класса
{
double *p = new double[v2.n]; // Создаем новый массив
for (int i = 0; i<v2.n; i++) p[i] = x*v2.p[i]; // Заполняем массив
Vector *pV = new Vector(p, v2.n); // Создаем новый объект на основе массива
delete[] p; // Освобождаем массив
return *pV; // Возвращаем ссылку на объект
}
int _tmain(int argc, _TCHAR* argv[])
{
double m1[] = { 1, 2, 3, 4.5, 7 };
Vector V1(m1, 5); // Создаем объект
V1.print(); // Печать объекта
cout << "\n";
for (int i = 0; i<5; i++)
cout << V1[i] << " "; // Пример обращения к операции []
V1[0] = 10.6; // Пример обращения к операции []
V1.print(); // Печать объекта
Vector V2; // Новый объект (вначале "пустой")
V2 = 100 * V1; // Пример выполнение перегруженной операции *
// V2=operator *(100, V1);
V2.print(); // Печать полученного объекта
system("pause"); // Останавливаем программу до нажатия любой клавиши
return 0;
}
// stdafx.h: включаемый файл для стандартных системных включаемых файлов
// или включаемых файлов для конкретного проекта, которые часто используются, но
// не часто изменяются
//
#pragma once
#include "targetver.h"
#include <stdio.h>
#include <tchar.h>
// TODO: Установите здесь ссылки на дополнительные заголовки, требующиеся для программы
#include <stdlib.h>
#include <iostream>
using namespace std;
3.4. Форма отчета по лабораторной работе
Отчет должен содержать: титульный лист, цель работы, условие задачи, текст программы с комментариями, при необходимости ручной расчет контрольного примера и результаты решения контрольного примера программой для проверки правильности работы алгоритма, выводы по работе.
3.5. Вопросы для самоконтроля
1. Способы перегрузки операций в Си++.
2. Перегрузка бинарной операции, когда первый операнд не является объектом класса.
3. Перегрузка операции с помощью дружественной функции класса.
4. Операции, для перегрузки которых оператор- функция обязательно должна принадлежать классу.
4. Лабораторная работа № 4. Изучение возможностей наследования классов
4.1. Цель и задачи работы, требования к результатам ее выполнения
Цель работы состоит в овладении навыками разработки программ на языке Си++, использующих возможности наследования классов для решения различных задач. Для достижения цели необходимо выполнить следующие задачи:
- изучить необходимые учебные материалы, посвященные наследованию классов в языке Си++ [1, 3];
- разработать программу на языке Си++ для решения заданного варианта задания;
- отладить программы;
- представить результаты работы программы;
- подготовить отчет по лабораторной работе.
4.2. Краткая характеристика объекта изучения
4.2.1 Общие сведения о наследовании классов
Основная идея, используемая при наследовании классов, заключается в том, что на основе существующего класса (класс родитель или базовый класс), создается производный класс (класс- наследник, дочерний класс), который включает в себя поля и функции базового класса (наследует их), и содержит дополнительные поля (обладает новыми свойствами) и функции [1, 3].
Примеры определения производных классов:
class S: X, Y, Z
{ ... } ;
class B: public A
{….};
class D: public X, protected B
{….};
4.2.2 Статусы доступа при наследовании классов
Перед именем базового класса может указываться статус доступа наследования (одно из ключевых слов public, protected, private). Статус доступа наследования определяет статус доступа наследуемых полей и функций из базового класса внутри производного класса.
Производный класс может определяться с ключевым словом struct или class (с ключевым словом union производный класс не определяется). Если производный класс определен с ключевым словом class, то по умолчанию статус доступа наследования private.
Если производный класс определен с ключевым словом struct, то по умолчанию статус доступа наследования public.
Статусы доступа при наследовании классов представлены в таблице 1.
Таблица 1- Статусы доступа при наследовании классов

