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

Ссылки на объект

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

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

Ссылка указывается оператором &, записываемым перед именем переменной.

Приведем пример использования ссылок:

int i j;

int &refToI = i; // refToI ссылается на переменную i типа int

int & refToJ = j; // refToJ ссылается на переменную j типа int

refToI = 8; // переменной i присваивается значение 8

refTo = 2;

refToI = refTo; // переменной i присваивается значение переменной j

При передаче объектов в функцию по ссылке синтаксис Доступа к объектам - членам класса, структуры или объединения осуществляется при помощи оператора ..

Пример:

cClassType &funcl( cClassType &objname)

{ objname.Dol();

objname.iData = 7; // изменение значения данных

return objname;

}

Перечисления

Перечисление, или перечислимый тип, является целым типом, который отождествляет индекс значения в массиве и его мнемоническое название. Пример:

enum eDay{sn, mn, ts, wd, th, fr, st} myDay;

myDay=st;

int iVar=sn;

Перечисление может иметь следующее формальное описание:

тип имя_типа {список_допустимых значений} список_объявляемых переменных;

тип список_объявляемых переменных;

тип {список_допустимых значений} список объявляемых переменных;

Для перечислимого типа, так же как и для целого типа, можно создавать указатели.

Константы

Константы предназначены для хранения неизменяемых данных. Константы создаются с помощью модификатора типа const.

Например: const int ivar;.

Указатели на члены класса

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

Оператор или конструктор

Синтаксис

Описание

::*

type::*ptr_name

Объявление указателя на член класса. type - имя класса, ptr_name имя указателя. Одновременно с объявлением указатель можно инициализировать, например:

NewType::*pNewType = &NewType::i;

.*

obj_name.*ptr

obj_name - имя объекта. Получение значения, используя объект или ссылку на объект. Например:

int j = Object.*pNewType;

->*

obj_ptr->*ptr_name

Получение значения, используя указатель на объект. Например:

int j = pObject->*pNewType;

Пример:

#include <iostream.h>

// Объявление класса cClassA.

class cClassA

{ public:

int I1;

Metodl() { cout « I1 « "\n"; }

};

// Объявление производного типа pToI - указателя на член класса I1

int cClassA::*pToI = &cClassA::Il;

void main()

{ cClassA iClassA; // Объявление объекта типа cAClass.

cClassA *piClassA = & iClassA; // Объявление указателя на этот объект.

int i;

iClassA.*pToI = 123; // Присваивание значения переменной iClassA::Il через *

iClassA.Metodl();

i = piClassA ->*pToI; // Получение значения, используя оператор ->*

cout « i « "\n";

}

// Пример использования указателя для статической переменной

class StaticMemberClass

{ public: static int iSMember; };

int StaticMemberClass: :iSMember = 0;

int *piSMember = &StaticMemberClass.:iSMember;

При использовании статических переменных указатели всегда являются указателями на существующий тип (в данном примере - int), а не на тип класса.

// Пример использования указателей на функции

#include <stdio.h>

struct A

{ virtual void Identify() = 0;};

// Объявление указателя на функцию - член Identify

void (A::*pldentify)() = &A::Identify;

// Объявление В производной от А

struct В : public A

{ void IdentifyO;};

// Объявление Identify для В

void B::Identify()

{ printf( "Выполнение метода B::Identify\n");}

void main()

{ В BObject; // Объявление объекта типа В

А *рА; // Объявление указателя на тип А.

рА = &BObject; // Определение указателя рА на объект типа В.

(pA->*pIdentify)O; // Вызов функции Identify, используя указатель pldentify. }

Типы класса

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

Структуры

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

  • переменная любого допустимого типа;

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

  • функция.

Объявление структуры может иметь следующее формальное описание:

// Объявление структуры

struct [имя_структуры] {

тип_элемента_структуры имя_ элемента 1;

тип_элемента_структуры имя_ элемента2;

...

тип_элемента_структуры имя_ элементам; } [список_переменных_типа_данной_структуры];

// имя_элемента может быть именем переменной или именем функции

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

struct [имя_структуры] {

тип_элемента_структуры [имя_ элемента1] : число_бит;

тип_элемента_структуры [имя_ элемента2] : число_бит;

тип_элемента_структуры [имя_ элементам] : число_бит;

} [список_переменных_типа_данной_структуры];

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

struct имя_структуры;

Если имя объявляемой структуры отсутствует, то создается анонимная структура. На практике при объявлении анонимной структуры всегда указывается создаваемая переменная или список переменных (типа данной структуры).

Список переменных типа данной структуры может содержать:

  • имена переменных (например, struA);

  • имена массивов (например, struA[10]);

  • указатели (например, *struA).

Для использования указателя на структуру ему необходимо присвоить адрес переменной типа структуры.

Размер структуры с битовыми полями всегда кратен 1 байту. Битовые поля можно определять для целых переменных типа int, unsigned int, char и unsigned char. Одна структура может состоять как из отдельных переменных, так и из битовых полей. Если для битового поля указано только число бит без имени элемента, то указанное число бит пропускается и доступ к ним не допускается. Если общее последовательное указанное число бит не кратно 8, то оставшиеся биты размещаются, но не используются.

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

Соседние файлы в папке VC++Баженова