Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Posobie_Cpp.doc
Скачиваний:
6
Добавлен:
20.11.2019
Размер:
603.14 Кб
Скачать

Void main()

{ int na =0;

int *p = new int[3];

p[0]=0;

p[1]=2;

p[2]=3;

cout<<p<<endl; // адрес элемента p[0];

*p++=12;

cout <<p[0]<<'\t'<<p[1]<<'\t'<<p[2];

}

2. Измените предыдущую программу, заменив выражение *p++ на (*p)++ . Что получится со значениями элементов массива?

3.2. Структуры

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

В отличие от массива, который является однородным объектом, структура может быть неоднородной. Тип структуры определяется записью вида:

struct student // за ключевым именем struct следует имя нового типа

{ // открывающиеся скобки

char name[20]; //

Int age; // элементы структуры

int id; //

}; // скобки и точка с запятой заканчивают описание

Где следует размещать определение структуры? Возможные варианты – внутри функции main() или перед ней. Чаще используют внешнее определение структуры, так как в этом случае возможно использование ее во всех функциях, следующих далее.

В приведенном примере шаблон student описывает новый тип данных, поэтому можно создавать переменные этого типа:

student victor;

Для обращения к элементам структуры используется оператор принадлежности ‑ точка (.), например, victor.age.

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

Структуры могут образовывать массив структур, например:

student group[35];

Рассмотрим пример работы со структурами. Разработаем структуру, представляющую временные величины в виде часы, минуты и научимся работать с ними.

#include <iostream.h>

// определение нового типа данных

struct time

{

Int hours;

Int mins;

}; // конец определения структуры, не забудьте точку с запятой

Void main()

{

time day1={5,45}; // определение и инициализация структуры

time day2={4,55}; // типа time

time sumt;

sumt.mins=(day1.mins+day2.mins)%60;

sumt.hours=(day1.hours+ day1.hours)+(day1.mins+day2.mins)/60;

cout<<sumt.hours<<” hours ”<<sumt.mins<<” minutes\n”;

}

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

time * pday = new time;

При этом pday – не имя структуры, а ее адрес. Доступ к элементам динамически созданной структуры осуществляется с помощью стрелочного оператора (->). Таким образом, pday->hours – это элемент hours указанной структуры.

#include <iostream.h>

struct time

{

Int hours;

Int mins;

};

Void main()

{

time *pday=new time;

pday->hours=60;

cout<<pday->hours;

delete pday;

}

  • Помните, если для объявления структуры используется имя структуры, используйте точку. А если идентификатор – указатель на структуру, используйте стрелочный оператор.

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

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

struct A // объявление структуры A

{

int k;

double x;

};

struct B // объявление структуры B

{

A s; // s – поле структуры B, по типу – структура типа A

double y;

};

B mas[2]; // массив структур

// способ обращения к полям структуры

mas[0].s.k = 1;

mas[1].y = 1.21;

Контрольные вопросы. А.

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