Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
c++ 3 minimax.docx
Скачиваний:
6
Добавлен:
25.09.2019
Размер:
99.99 Кб
Скачать

13) Типы данных, определяемые пользователем: структуры.

В отличие от массива, все элементы которого однотипны, структура может содержать элементы разных типов. В языке С++ структура является видом класса и обладает всеми его свойствами, но во многих случаях достаточно использовать структуры так, как они определены в языке С:

struct [ имя_типа ] {тип_1 элемент_1; тип_2 элемент_2; тип_n элемент_n;} [ список_описателей ];

struct Student {string F,I,O; int nz;} или struct steck {int inf; struct steck *next;}; steck *top=0;

Элементы структуры называются полями структуры и могут иметь любой тип, кроме типа этой же структуры, но могут быть указателями на него.

Доступ к полям структуры выполняется с помощью операций выбора . (точка) при обращении к полю через имя структуры и -> при обращении через указатель, например:

Struct first

{int m; int* p;}

Int main()

{first f1; f1.m=1 f1->p=2;}

15)Типы данных, определяемые пользователем: объединения.

Объединение отличается от структуры тем, что в его полях могут храниться разные данные.

Для каждого поля указывается его размер в битах, обычно объем занимаемой памяти кратен 8(1 байт) битам.

Битовые поля используются для хранения установочных файлов.

Битовое поле

Перечисляемый тип – enum

enum <имя типа>{<список констант, переменных>};

например, enum Err{two=2, three,...};

Этот тип применяется при организации объединения.

Пусть union – объединение созданное для хранения информации о платёжном документе (карта\чек). При этом карта- символьный тип, а чек – целый.

Поэтому для описания создаём структуру:

enum tpay{card,chek};

<начало типа>

struct {tpay pay;

union{char card[25]; int chek};

}; <конец типа> info<переменная>;

int main()

{... switch (info.pay) //вывести по какому документу оплачивается

{case card: cout<<card<<endl;

Case chek: cout<<chek<<endl;};

}

11) Типы данных, определяемые пользователем: перечисления.

При написании программ часто возникает потребность определить несколько именованных констант, для которых требуется, чтобы все они имели различные значения. Для этого удобно воспользоваться перечисляемым типом данных. Формат: enum [ имя_типа ] { список_констант };

Имя типа задается в том случае, если в программе требуется определять переменные этого типа. Компилятор обеспечивает, чтобы эти переменные принимали значения только из списка констант. Константы должны быть целочисленными и могут инициализироваться обычным образом. При отсутствии инициализатора первая константа обнуляется, а каждой следующей присваивается на 1 большее значение, чем предыдущей:

enum Err { ERR_READ, ERR_WRITE, ERR_CONVERT};

Err error;

...

switch (error)

{case ERR_READ:/* операторы */ break;

case ERR_WRITE: /* операторы */ break;

case ERR_CONVERT: /* операторы */ break;}

Константам ERR_READ, ERR_WRITE, ERR_CONVERT присваиваются значения 0, 1 и 2 соответственно.

2. Понятие класса. Описание класса (С++). Поля и методы. Пример)

  • Класс – это структура языка, включающая, помимо описания данных, описание процедур и функций, которые могут быть выполнены над представителем класса – объектом.

Переменные в зависимости от предназначения именуются полями или свойствами. Процедуры и функции класса – методами. Соответствующий классу тип называется объектным типом.

  • Объект– это конкретный экземпляр, созданный в соответствии с его объявлением с помощью класса. Переменная типа класс – это переменная объектного типа и называется экземпляром класса или объектом. Объекты как представители класса объявляются в программе в разделе var, например: Var student: TPerson; professor: TPerson;

  • Поля – это данные, уникальные для каждого экземпляра класса. Они предназначены для хранения данных во время работы экземпляра класса (объекта). Поле объявляется как обычная переменная и может быть любого типа. В описании класса поля должны предшествовать методам и свойствам.

  • Метод – это подпрограмма (процедура или функция), которая определена как элемент класса. Описание метода аналогично описанию обычной подпрограммы модуля. Внутри одного класса можно объявить столько методов, сколько надо.

Особенности полей. Могут быть объявлены поля различных типов, которым при создании объекта или в процессе работы программы присваиваются конкретные значения. Комбинация значений всех полей объекта определяет состояние этого объекта. Изменение значения поля изменяет и состояние объекта. Поэтому значения полей уникальны для каждого экземпляра класса (объекта), хотя и может быть несколько объектов с полностью идентичными значениями полей. Объявляются поля данных внутри описания класса способом, аналогичным определению полей записей и похожим на объявление обычных переменных.

Особенности методов. Как источник действий, объект использует набор методов, т.е. подпрограмм, разработанных для операций с полями. Все методы совместно определяют поведение объекта. Адреса вызова некоторых методов объекта определяются на этапе компиляции программы, а других – с помощью специальной таблицы, создаваемой после инициализации программы. Каждый объект содержит указатель на такую специальную таблицу, содержащую информацию, необходимую для вызова метода. Эта таблица является принадлежностью класса и для нее выделяется память. Таким образом, методы у объектов одного класса общие.

Свойства.Для обеспечения надежности нежелателен прямой доступ к полям объекта: чтение и изменение их содержимого должно производиться посредством вызова соответствующих методов. Таким образом, класс представляет собой описание того, как будет выглядеть и вести себя его представитель (экземпляр или объект).

class Animal { //класс - животное

string name; // название животного

string type; // класс

int weight; // средний вес

friend void tonotepad(Animal &);//вот дружественная функция

public:

Animal(){cout << " конструктор без параметров " << this <<endl;};

Animal(string, string, int); // конструктор с параметрами

Animal(const Animal&){cout << " конструктор копирования " << this <<endl;};

~Animal(){cout << "деструктор " << this <<endl;}; //деструктор

string Getname() const {return name;}; // вывод названия

string Gettype() const {return type;};// вывод класса

int Getweight() const {return weight;};// вывод среднего веса

void SetNAME(string); // ввод названия

void SetTYPE(string);// ввод класса

void SetWEIGHT(int);// ввод среднего веса

bool operator >(const Animal &An2){return weight > An2.weight;};//перегрузка операций >

};

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]