
- •Лабораторная работа 1
- •Компоненты класса
- •Тип_класса имя_класса {список_членов_класса};
- •Имя_класса имя_объекта;
- •Конструкторы
- •Статические члены класса
- •Вопросы к защите лабораторной работы
- •Лабораторная работа 2
- •Задания на лабораторную работу
- •Перегрузка оперций
- •Перегрузка унарных операций
- •Перегрузка бинарных операций
- •Перегрузка операции присваивания.
- •Вопросы к защите лабораторной работы
- •Лабораторная работа 3
- •Связанных наследованием.
- •Задания по лабораторной работе
- •Простое наследование
- •Множественное наследование
- •Абстрактные классы
- •Виртуальные функции
- •Вопросы к защите лабораторной работы
- •Лабораторная работа 4 Тема: Универсальность. Применение шаблонов функций и классов.
- •Задания к лабораторной работе
- •Шаблон функции
- •Основные свойства параметров шаблона функции
- •Шаблон класса
- •Основные свойства шаблонов классов
- •Компонентные функции параметризованных классов
- •::Имя_функции(список_параметров){ . . . } Вопросы к защите лабораторной работы
- •Список литературы
Статические члены класса
Каждый объект одного и того же класса имеет собственную копию данных класса. Но существуют задачи, когда данные должны быть компонентами класса, и иметь их нужно только в единственном числе. Такие компоненты должны быть определены в классе как статические (static). Статические данные классов не дублируются при создании объектов, т.е. каждый статический компонент существует в единственном экземпляре.
class Point{
int x, y;
static int counter;
public:
Point(void){ x = y = 0; count++;}
Point(int _x, int _y){ x = _x; y = _y; counter++;}
~Point(){ counter--;} static int getNumber(){return counter;}
};
int Point::counter = 0; void main() { Point pp = new Point[20]; Point p1(3,33); cout << Point::getNumber()<<‘\n’; delete [] pp; cout << p1::getNumber()<<‘\n’; }
Доступ к статическому компоненту возможен только после его инициализации. Для инициализации используется конструкция
тип имя_класса : : имя_данного инициализатор;
Например, int Point::counter = 0;
Это предложение должно быть размещено в глобальной области после определения класса. Только при инициализации статическое данное класса получает память и становится доступным. Обращаться к статическому данному класса можно обычным образом через имя объекта
имя_объекта.имя_компонента
или через имя класса
имя_класса : : имя_компонента
Однако так можно обращаться только к public компонентам.
К private статической компоненте извне можно обратиться с помощью компонента-функ-ции этого класса. Эту проблему решают статические компоненты-функции. Эти функции можно вызвать через имя класса.
имя_класса : : имя_статической_функции
Вопросы к защите лабораторной работы
1. Что такое класс? Для чего описываются классы?
2. Чем отличается класс от структуры?
3. Какие модификаторы используются для ограничения доступа к членам класса?
4. Для чего в классе определяется конструктор? Сколько может быть конструкторов в классе? Когда вызывается конструктор?
5. Может ли быть конструктор описан в области доступа private?
6. Что будет, если в классе не определен конструктор?
7. Для чего в классе определяется деструктор? Сколько может быть деструкторов в классе? Когда вызывается деструктор?
8. Может ли быть деструктор описан в области доступа private?
9. Что будет, если в классе не определен деструктор?
10. Что такое конструктор, деструктор по умолчанию? Когда они вызываются?
11. Что такое экземпляр класса?
12. Как можно обратиться к членам-данным и членам-функциям класса?
13. Для чего в классе задаются статические члены? В чем отличие их использования от обычных членов класса?
Лабораторная работа 2
Тема: Переопределение операций. Дружественные функции.
Цель работы: Ознакомиться с особенностями использования дружественных классов и функций, а также возможностью получения законченного нового типа данных, определив для него допустимые операции с помощью перегрузки операторов.
Задания на лабораторную работу
Для класса из лаб. работы №1 реализовать набор операций для работы с объектами класса: сложение, вычитание, присваивание, инкремент постфиксный и префиксный, преобразование к разным типам (по усмотрению студентов и преподавателя). Операции сложения, присваивания, инкремента, преобразования реализовать как методы класса, операцию вычитания – как дружественную функцию.
Изменить демонстрационную пpогpамму, продемострировав все перегруженные операции.
Краткие теоретические сведения
Абстрактный тип данных (АТД) тип данных, определяемый только через операции, которые могут выполняться над соответствующими объектами безотносительно к способу представления этих объектов. Для реализации АТД необходимо, во-первых, выбрать представление памяти для объектов и, во-вторых, реализовать операции в терминах выбранного представления.
Примером абстрактного типа данных является класс в языке С++. В С есть возможность использовать знаки стандартных операций для записи выражений как для встроенных, так и для АТД.