- •Министерство образования и науки украины
- •Лабораторная работа № 1
- •Ход работы
- •Требования к отчетам
- •Отчёт должен содержать
- •Вопросы для контроля и самостоятельной работы
- •Лабораторная работа №2
- •Символы типа
- •Ход работы
- •Вопросы для контроля и самостоятельной работы
- •Лабораторная работа №3 Разработка программ со скалярными типами данных (2 часа)
- •Теоретические сведения
- •Ход работы
- •Контрольные вопросы для подготовки и самостоятельной работы
- •Лабораторная работа №4 Разработка программ с циклическими вычислительными процессами
- •Теоретические сведения
- •Алгоритм работы оператора цикла for ():
- •Ход работы
- •Контрольные вопросы для подготовки и самостоятельной работы
- •Лабораторная работа №5 Разветвляющийся вычислительный процесс с различными логическими условиями: оператор if... Else, условная операция (?:), оператор switch, оператор break, оператор goto (2 часа)
- •Теоретические сведения
- •Условная тернарная операция (?:)
- •Оператор варианта switch
- •Ход работы
- •Контрольные вопросы для подготовки и самостоятельной работы
- •Лабораторная работа №6 Операции с, их приоритеты и использование. Преобразование типов (4 часа)
- •Теоретические сведения
- •Приоритет операций и порядок выполнения (ассоциативность)
- •Преобразование типов
- •(Новый_тип) операнд
- •Ход работы
- •Контрольные вопросы для подготовки и самостоятельной работы
- •Лабораторная работа №7
- •Синтаксис определения функций в с
- •Использование локальных и глобальных переменных в функциях. Вызов функции
- •Ход работы
- •Требования к содержанию отчёта приведены в лабораторной работе №1. Контрольные вопросы для подготовки и самостоятельной работы
- •Лабораторная работа №8 Разработка программ с указателями (2 часа)
- •Теоретические сведения
- •Основные операции с указателями
- •Указатели и целые величины
- •Динамическое размещение указателей в памяти
- •Ход работы
- •Требования к содержанию отчёта приведены в лабораторной работе №1. Контрольные вопросы для подготовки и самостоятельной работы
- •Лабораторная работа №9 Массивы. Селективная обработка массивов
- •Теоретические сведения
- •Ход работы
- •Требования к содержанию отчёта приведены в лабораторной работе №1
- •Контрольные вопросы для подготовки и самостоятельной работы
- •Лабораторная работа №10
- •Ход работы
- •Контрольные вопросы для подготовки и самостоятельной работы
- •Лабораторная работа №11
- •Контрольные вопросы для подготовки и самостоятельной работы
- •Лабораторная работа № 12
- •Ход работы
- •Контрольные вопросы для подготовки и самостоятельной работы
- •Лабораторная работа № 13
- •Ход работы
- •Контрольные вопросы для подготовки и самостоятельной работы
- •Лабораторная работа № 14
- •Ход работы
- •Контрольные вопросы для подготовки и самостоятельной работы
- •Лабораторная работа № 15 Использование указателей для работы с составными типами данных (2часа)
- •Теоретические сведения
- •Ход работы
- •Контрольные вопросы для подготовки и самостоятельной работы
- •Лабораторная работа № 16
- •Указатели как параметры функции
- •Ход работы
- •Контрольные вопросы для подготовки и самостоятельной работы
- •Лабораторная работа №17
- •Ход работы
- •Контрольные вопросы для подготовки и самостоятельной работы
- •Лабораторная работа № 18
- •Использование администратора проектов
- •Lab18.Cpp- Основной файл проекта
- •Ход работы
- •Контрольные вопросы для подготовки и самостоятельной работы
- •Лабораторная работа № 19
- •Доступ к пикселям
- •Графические примитивы
- •Ход работы
- •Контрольные вопросы для подготовки и самостоятельной работы
- •Лабораторная работа №20 Разработка программ с использованием классов (2 часа)
- •Теоретические сведения
- •Объявление и определение класса
- •Тело класса
- •Использование класса
- •Инкапсуляция. Управление доступом к членам класса
- •Классы памяти для объектов
- •Использование данных-членов класса
- •Ход работы
- •Требования к содержанию отчёта приведены в лабораторной работе №1. Контрольные вопросы для подготовки и самостоятельной работы
- •Лабораторная работа №21
- •Инициализация объектов класса
- •Деструкторы
- •Вызов деструкторов
- •Ход работы
- •Контрольные вопросы для подготовки и самостоятельной работы
- •Лабораторная работа №22 Использование наследования для создания иерархии классов (2 часа)
- •Теоретические сведения
- •"Друзья" классов (friend)
- •Ход работы
- •Контрольные вопросы для подготовки и самостоятельной работы
- •Лабораторная работа №23 Использование виртуальных и указателей для работы с объектами классов (2 часа)
- •Теоретические сведения
- •Виртуальные базовые классы
- •Виртуальные деструкторы
- •Ход работы
- •Литература
- •Выходные данные
Объявление и определение класса
Класс - это пользовательский тип данных, (аналогично структуре), который содержит (включает, инкапсулирует) не только объявления данных, но и функции. Эти функции называются функциями-членами класса и определяют, что может делать класс. Структуры в С также могут содержать функции.
Для того, чтобы использовать класс, его нужно вначале объявить точно так же, как это делается со структурами. И так же как для структур, полное объявление класса может появиться в программе только один раз. Рассмотрим пример объявления простого класса:
class Counter { // имя типа Counter
long count;// данное-член класса, объявлено в разделе private по умолчанию
public: // разделён public, данные доступны из программы
void SetValue (long); // функции-члены класса, объявлены в разделе public
long GetValue ();
};
Ключевое слово class вводит объявление класса. Далее следует имя класса (Counter). Тело класса должно заключаться в фигурные скобки, после которых стоит точка с запятой. Классы могут содержать не только объявления функций, но и их полные определения inline - функции. Функции внутри классов могут быть настолько длинными и сложными, насколько это необходимо.
Переменные, объявленные внутри класса, принадлежат этому классу. В некоторых случаях переменные могут разделяться (использоваться) различными экземплярами класса (с классом памяти static). Идентификаторы (имена) переменных и функций внутри класса застрахованы от конфликтов с идентификаторами других классов. Класс - это замкнутый программный комплект с собственными идентификаторами.
Для идентификаторов класса применимы те же правила, что и для остальных типов или имён переменных. В С для идентификаторов предельная длина не определена, но в Borland C максимальная длина равна 32 символам. По умолчанию все 32 символа являются значащими. Регистры букв (строчная или прописная) в идентификаторах различаются.
Тело класса
Переменная count объявлена внутри класса. Таким образом, count - это переменная-член - (данное-член) класса. Любая переменная, определённая в классе, имеет область видимости класса. Область видимости переменной-члена простирается от точки её объявления в классе до конца объявления класса.
В С данные и функции-члены, объявленные внутри класса, не содержат спецификацию класса памяти (кроме static) и лексически принадлежат области действия данного класса.
Класс имеет столько переменных, сколько необходимо. Переменные могут быть любого типа, включая другие классы, указатели на объекты классов и даже указатели на динамически распределяемые объекты.
Класс Counter содержит объявление функций SetValue () и GetValue (), которые называются функциями-членами класса. Эти функции пока не определены, они только объявлены. Как и другие функции в С, функции-члены должны быть объявлены до использования. Объявление должно быть полным, включая тип возвращаемого значения и типы аргументов.
Пример
-
void Counter::Setvalue (long value)
{
count = value; // изменение значения
// данного-члена count
}
long Counter::GetValue ()
{
return count; // вернуть значение
// данного члена count
}
При определении функции-члена после типа возвращаемого значения указывается, членом какого класса является функция. Для этого нужно написать имя класса и поставить за ним два двоеточия – оператор разрешения области видимости.
Формат определения функции –члена класса.
Определение функций для класса Counter обычно осуществляется в других модулях:
<Тип_ возвращаемого_значения> <Имя_ класса> ::
<Имя_функции> (<Объявления_ параметров>)
{<Тело _функции>}
Доступ к членам класса в общем случае осуществляется с помощью нотации
<Имя_объекта> <Имя_члена_класса>,
кроме функций-членов, которые имеют прямой доступ к данным-членам.
Класс, объявленный внутри другого класса, называется вложенным классом. Его имя является локальным для охватывающего класса. Вложенный класс имеет область действия, лежащую внутри области действия охватывающего класса. Эта вложенность является чисто лексической. Вложенный класс не имеет никаких дополнительных привилегий в доступе к элементам охватывающего класса (и наоборот). Уровень вложенности классов указанным образом является любым.
Напpимеp:
struct outer
{
typedef int tint; // выражение outer::tint - это синоним типа int tint x;
struct inner // выражение outer::inner - это вложенная структура (класс)
{static int x;}; // статическая переменная (член) структуры типа inner
tint y;
int f(); // функция-член структуры типа outer.
}
int outer::f() // определение функции-члена структуры типа outer
{
tint y1=х; // х видим и доступен здесь, т.к. функции–члены имеют доступ к //данным-членам класса (структуры)
return у1;
}
outer::inner::x=5; // опpеделение статического данного-члена класса
outer:: tint у=2;
Доступ к статическому данному-члену класса осуществляется по имени класса (outer:: inner::), а не по имени объекта класса.