- •Основные теоретические сведения Определение класса
- •Int denum; //поля - закрыты
- •Void Display(); // вывод на экран
- •Void f1(Date t); //по значению
- •Void f2(Date &t); //по ссылке
- •Void f3(Date *t); //по указателю
- •Определение методов класса
- •Void setTime(const Time &t); // метод перегружен
- •Практические задания
- •Упражнения для самостоятельного выполнения
Практическое занятие № 1 |
Создание и использование классов и объектов |
Цель занятия:
изучить технику программирования нового типа данных (определение класса),
изучить использование объектов определяемого типа.
рассмотреть различные варианты сочетаний классов с другими классами и объектами
Время на выполнение работы: 2 часа
Учебные вопросы:
Описание классов
Создание объектов и работа с ними
Создание методов и работа с ними
Подготовка к выполнению работы:
Изучить рекомендованную литературу.
Изучить материал настоящего руководства.
Материалы для подготовки к занятию:
Конспект лекций
[1] стр. 178 - 182
Основные теоретические сведения Определение класса
Класс можно определить с помощью конструкции
class имя_класса { компоненты класса };
Точка с запятой в конце ставится обязательно. В этом определении:
служебное слово - class;
имя класса — идентификатор;
компоненты класса — определения и объявления данных и принадлежащих классу функций.
Имя класса является по умолчанию именем типа объектов. Данные - это поля объекта, образующие ею структуру. Их называют данными-членами или переменными-членами. Значения полей определяют состояние объекта. Функция, являющаяся компонентом класса, называется функциями-членами. Функции-члены класса иногда называют методами. Функциями-членами класса определяются операции над объектами класса. Разрешается определять класс:
с полями и методами;
только с полями;
только с методами;
без полей и без методов.
Класс без полей и без методов называется пустым классом.
Элементы класса типа struct no умолчанию открыты и доступны в других частях программы. Члены класса class по умолчанию закрыты и недоступны вне данного класса. Доступ к содержимому класса задается спецификаторами доступа, которые обозначаются ключевыми словами public и private. Ключевое слово public объявляет элемент класса доступным вне класса, а ключевое слово private закрывает доступ снаружи. После ключевого слова требуется поставить знак “:” (двоеточие).
И в классе, и в структуре можно написать столько спецификаторов public и private, сколько необходимо, и в том порядке, в каком требуется. Очередной спецификатор действует до следующего. Допускается индивидуально объявлять каждый элемент класса либо открытым, либо закрытым. Открытая часть класса называется интерфейсом.
Примеры объявлений классов приведены в листинге 1.
Листинг 1. Примеры объявлений классов
class NullType {}; //пустой класс
class Fraction
{
int num;
Int denum; //поля - закрыты
public:
void reduce(); //метод - открыт
};
class XXX
{
int yyy(); //метод - закрыт
public:
int fff(int t); //метод - открыт
int RRR; //поле - открыто
};
class Money
{
private:
double Rubls;
public:
void Add(const double &r);
void Display();
};
class Date
{
int month, day, year; // поля - месяц, день, год
public:
void set(int d, int m, int y); //метод - установить дату
void get(int &d, int &m, int &y); //метод - получить дату
void next(); // метод - установить следующую дату
void print(); // метод - показать дату
};
Использование класса
Имея определение класса, можно объявлять переменные типа «имя_класса». Переменная класса называется объектом, или экземпляром класса. Класс объявляется один раз, а вот объектов можно создать столько, сколько необходимо. Объекты объявляются аналогично переменным встроенного типа:
имя_класса имя_объекта; // скалярный объект
имя_класса *имя_объекта; // указатель
имя_класса имя_объекта[количество]; // массив
Следующие переменные могут быть объявлены для приведенных в листинге 1 классов:
NullType a, *pb; // скалярный объект и указатель
Date *pd; // указатель
Money t; // скалярный объект
Money *p; // указатель
Money m[100]; // массив объектов
Переменную можно инициализировать другой переменной того же класса. Разрешается объявлять и ссылки на объекты с обязательной инициализацией.
Money x = t; //инициализация переменной
Date y(d); //инициализация переменной
Date &u = y; //обязательная инициализация ссылки
Если поля открыты, разрешается обычная инициализация полей инициализатором структуры, например
class Person
{ public: string Fio; double summa; };
Person Kunaev = { "Kупаев H.”, 10000.00 };
Указатели могут быть инициализированы так же, как и указатели на переменные встроенных типов:
Money *pt = new Money, *pp = pt, *ps;//объявление указателей
ps = new Money; //и создание объектов
Date *pd = new Date(), *pr; //объявление указателей
pr = new Date(); //и создание объектов
Форма со скобками после типа выполняет обнуление полей динамического объекта. Объекты класса разрешается определять в качестве полей другого класса:
class Count
{
Money Summa; // сумма счета
unsigned long NumberCount; // номер счета
Date D; // дата открытия счета
public: