Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lektsii_OOP.doc
Скачиваний:
4
Добавлен:
01.03.2025
Размер:
4 Mб
Скачать

Глава 1. Классы и объекты

1. Новые возможности языка С++

1.1. Операция разрешения области видимости ::

В языке С существует такое правило – глобальная переменная видна во всех функциях, расположенных ниже ее определения, если в них (функциях) нет переменной с таким же именем. Операция :: позволяет одновременно использовать и глобальную, и локальную переменные с одинаковыми именами.

Например,

int x = 1;

void F1()

{x++;} // x(глоб) = 2

void F2()

{ int x = 3;

cout << x; // x(лок) = 3

}

void F3()

{int x = 5, y;

y = ::x * x; // 2(глоб) * 5(лок)

cout << y; // y = 10

}

1.2. Перечислимый тип

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

Например, описание

enum {FALSE, TRUE};

опеределяет две константы FALSE = 0, TRUE = 1.

int y;

if (x > 0) cout << TRUE; else cout << FALSE;

Можно задать тип данных, значения которых – FALSE и TRUE.

enum boolean {FALSE, TRUE};

Тогда можно определить функцию, возвращающую значение этого типа.

boolean FF(int x)

{if (x > 0) return TRUE;

return FALSE; }

Можно задать булевский массив

boolean a[20];

Значения переменных перечислимого типа необязательно меняются с 0.

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

Например,

enum {Up = 72, Left = 75, Right = 77, Down = 80}; // скэн-коды управляющих клавиш

С этими именами их удобно использовать для программирования игр или организации меню. Например,

char s;

s = getch();

if (s = = 0) // если символ – управляющий

switch(getch())

{case Up: ...;break;

case Down: ...;break;

case Left: ...;break;

case Right: ...;

}

1.3. Модификатор const

В языке С константу можно задать директивой define

#define Pi 3.14159

В языке С++ принято константу задавать модификатором

const тип имя = значение

const double Pi = 3.14159;

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

Константная переменная обязательно должна быть проинициализирована, и в дальнейшем ее менять не разрешается.

const double Pi; // ошибка

Pi = 9.8; // ошибка

Константными могут быть и указатели.

Ниже приведены примеры описаний и операторов правильной и ошибочной работы с ними.

const int nine = 9;

const int one = 1;

int number = 5, n = 7;

int * const u1 = &number; // указатель-константа, его значение нельзя менять

cout << *u1; // вывод 5

*u1 = 10; // новое значение переменной number

u1 = &n; // ошибка: значение константы-указателя u1 менять нельзя

const int * u2 = &nine; // указатель на константу, сам указатель не константа

*u2 = 7; // ошибка : константу ‘nine’ менять нельзя

const int * const u3 = &nine; // и указатель, и значение – константы, менять нельзя:

*u3 = 99; // ошибка: константу ‘nine’ менять нельзя

u3 = &number; // ошибка : константный указатель менять нельзя

Аналогичны правила работы с указателями на строки:

const char * s1 = “text”; // s1 – указатель на текст-константу, указатель не константа

s1[0] = ’T’; // ошибка: текст изменять нельзя

const char * t = ”ttt”;

s1 = t; // это верно, значение неконстантного указателя можно изменить

char * const s2 = ”текст”; // s2 – константный указатель

s2[0] = ’Т’; // верно: в данном случае константа – адрес строки, а текст менять можно

s2 = t; // ошибка: s2 – константный указатель – изменять нельзя

const char * const s3 = ”all - const!”; // Ничего изменить нельзя!

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