Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
new_mb.doc
Скачиваний:
2
Добавлен:
01.03.2025
Размер:
892 Кб
Скачать
☆
    1. 3.4. Ссылки

Ссылка является альтернативным именем объекта и обязательно должна быть инициализирована. Над ссылками не могут выполняться какие-либо действия, поэтому она всегда ссылается на тот объект, которым была инициализирована.

Листинг 3.8. Применеие ссылок.

#include <iostream>

using namespace std;

int main (void)

{

int x = 1;

int &y = x; //ссылка на переменную x;

cout << y << endl << x << endl << endl;

y++;

cout << x << endl;

x++;

cout << y << endl;

return 0;

}

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

    1. 3.5. Структуры

Структура представляет собой переменные или функции, объединенные для удобства работы с ними, так как они могут трактоваться и в качестве самостоятельных элементов, и как единое целое. Простейшим примером структуры может быть точка в пространстве – тройка значений координат. Важным аспектом при работе со структурами является их возможность выступать и в роли параметров при вызове функции, и в роли возвращаемого функцией значения, при этом передачу больших структур удобнее осуществлять не посредством передачи значения, а с использованием механизма указателей или ссылок. В случае с указателем, вместо записи, обусловленной приоритетами операций, «(*структура).элемент» удобнее использовать «структура->элемент».

Листинг 3.9. Примеры структур.

#include <iostream>

using namespace std;

//точка в пространстве – набор из трех координпт;

struct Point

{

double x;

double y;

double z;

};

int main (void)

{

Point p;

p.x = 1;

p.y = 2;

p.z = 3;

p.z++;

cout << p.x << " " << p.y << " " << p.z << endl;

Point *ptrp = &p;

ptrp->y++;

cout << p.x << " " << p.y << " " << p.z << endl;

return 0;

}

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

Листинг 3.10. Массивы и структуры.

#include <iostream>

using namespace std;

//задание массива из четырех точек;

struct Point

{

double x;

double y;

double z;

} curve[4] = { { 1.2, 1.7, 1.4 },

{ 2.1, 2.8, 2.3 },

{ 2.2, 2.8, 4.3 },

{ 3.3, 3.1, 4.1 } };

int main (void)

{

for (int i = 0; i < 4; i++)

cout << curve[i].x << " " << curve[i].y << " " << curve[i].z << endl;

return 0;

}

Структуры применяются также для создания так называемых. битовых полей. В такой структуре размер каждого элемента указывается в битах после символа двоеточия и все они имеют одинаковый тип. Размер такой структуры определяется целым числом количества байт, необходимого для хранения одного элемента указанного типа, и вмещающего все длинны элементов. Так например, битовое поле из семи «char» – элементов имеет размер одни байт – размер типа «char», а поле из девяти элементов тогоже типа – два байта.

Листинг 3.11. Битовые поля.

#include <iostream>

using namespace std;

//битовое поле;

struct Flags

{

char x : 1;

char y : 1;

char z : 6;

} f;

int main (void)

{

int x;

cin >> x;

f.x = x;

cout << sizeof (f) << endl;

return 0;

}

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