Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции / LECS6.DOC
Скачиваний:
47
Добавлен:
16.04.2013
Размер:
57 Кб
Скачать

Класс памяти static

Статические переменные имеют два важных применения.

  1. Локальная статическая переменная сохраняет предыдущее значение при повторном входе в блок.

Пример.

Int f ()

{

static int called=0;

++called;

. . . .

return called;

}

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

  1. Статические функции видны только внутри файла, в котором они определены. В отличии от обычных функций, к которым возможен доступ из других файлов, статическая функция доступна только в своем файле.

static int goo (int a)

{

. . . .

}

int foo (int a)

{

. . . .

b=goo (a); //goo доступна только в этом файле

. . . .

}

(7.10) что делает эта программа.

/* Статические переменные */

#include <stdio.h>

int Next1(void);

int Next2(void);

main()

{

int i;

printf("\nCalling Next1():\n");

for (i = 1; i <= 10; i++)

printf(" %d", Next1());

printf("\nCalling Next2():\n");

for (i = 1; i <= 10; i++)

printf(" %d", Next2());

return 0;

}

int Next1(void)

{

static int value = 1; /* Static variable */

return value++;

}

int Next2(void)

{

int value = 1; /* Normal local variable */

return value++;

}

Некоторые особенности компоновки.

Имя, объявленное в области видимости файла, как static, является локальным и скрыто от других файлов. Так же ведут себя функции, объявленные inline и переменные с модификатором const. Переменные const, находящиеся в области видимости файла, но не являющиеся статической, может быть задан внешний тип компоновки с помощью объявления ее extern.

Программы на Си++ могут компоноваться с программами на Си на Паскале, в зависимости от реализации.

Пространство имен.

Си++ унаследовал от Си единое пространство имен. Возникающие из-за этого конфликты привели к появлению в Си++ области видимости пространства имен.

Namespace LMPinc

{

class purrles{…};

class toys{…};

. . . .

}

Идентификатор пространства имен может быть использован, как часть идентификатора, разрешающего область видимости. Идентификатор_пространства_имен :: идентификатор

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

using namespace LMPinc;

toys top; //используется LMPinc :: toys

Пространства имен могут быть вложенными.

namespase LMPout

{

int n;

namespace LMPin

{

int sq()

{

return n*n;

} //LMPout :: n

void pr_mu_logo():

}

void LMPin :: pr_mu_logo()

{

cout<<”LMPinc”<<eldl;

}

}

Вместо глобальных статических переменных может использоваться безымянное пространство имен. Например,

Namespace

{

int count=0;

} //здесь count уникальный.

// count доступна в остальной части файла

void chg_cnt(int i)

{

count=i;

}

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

Ключевое слово enum используется для объявления особого целого типа с набором именованных целых констант, называемых константами перечислимого типа или перечислимыми константами.

enum suit {clubs, diamonds, hearts, spides};

0 1 2 3

по умолчанию

Перечислимые константы могут быть инициализированы произвольными целыми константами, а также целыми выражениями

enum ages {laura=7, ira=8, harold=59, philip=harold+7};

66

Теговые имена и имена перечислимых констант должны быть уникальны в пределах области видимости.

Перечислимые константы могут быть преобразованы к обычному целому типу, но не наоборот.

enum signal {off,on}a=on; //a присвоено значение on=1

enum answer {no, yes, maybe=-1}b;

enum negative {no, false}c; //недопустимо no и false переобъяв- лены

int i, j=on; //допустимо

a=off; //допустимо

i=a; //допустимо

b=a; // недопустимо, разные типы

b=static_cast<answer>(a); //допустимо

b=(a? No : yes);

Соседние файлы в папке Лекции