Главная Случайная страница


Полезное:

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


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Константы в перечислениях





Перечисления (enum) не очень широко использовались в языке С по одной простой причине: символические имена констант имеют глобальную область действия и быстро захламляют пространство имен. В C++ эта проблема исчезла, поскольку область действия символических имен ограничивается классом или структурой.

class Foo {

public:

enum Status { kOpen = 1, kClosed };

};

// Где-то в программе

Foo::Status s = Foo::kOpen;

Обратите внимание — область действия должна быть явно указана как в имени типа, так и в символическом имени. Следовательно, символические имена kOpen и kClosed можно использовать в программе и для других целей. Компилятор рассматривает символические имена перечислений как макросы, а не как константные переменные. Это обстоятельство может оказаться важным при инициализации глобальных переменных (см, далее в этой главе).

Указатель на константу

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

const int* p;

int i = 17;

p = &i; // Можно

*p = 29; // Нельзя

Сказанное также относится к структурам и объектам.

class foo {

public:

int x;

};

const foo* f = new foo;

f->x = 17; // Нельзя, присвоение членам класса не допускается

Константный указатель

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

int i = 17;

int j = 29;

int* const p; // Нельзя! Должно быть задано начальное значение

int* const p1 = &i; // Порядок

*p1 = 29; // Можно; величина, на которую ссылается

//указатель, может изменяться

p1 = &j; // Нельзя







Date: 2016-07-25; view: 354; Нарушение авторских прав



mydocx.ru - 2015-2024 year. (0.005 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию