Описание информационного объекта в программе

Определение и объявление объекта

Перед тем, как использовать информационный объект, его нужно описать (определить или объявить):

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

Объявления делают идентификаторы информационных объектов известными компилятору.

• В программе определение информационного объекта всегда одно, объявлений может быть несколько.

 

Описание является определением, если:

• содержит инициализатор;

• полностью описывает функцию (включает тело функции);

• описывает объединение или структуру (включая компоненты);

• описывает класс (включая его компоненты);

Описание является объявлением, если:

• описывает прототип функции;

• содержит спецификатор extern;

• описывает статический компоненткласса;

• описывает имя класса;

• описывает имя типа, вводимого пользователем (typedef).

 

 

Примеры описаний программных объектов

char[1] c; //определение символьной переменной

int a; //определение целочисленной переменной

float x, y; //определение вещественных переменных

 

char* str = "aaaa"; //определение указателя и инициализация его адресом
//строкового литерала

 

struct complex { float re, im; }; //определение структурного типа (структуры)

 

struct complex1 { int re, im; }; //определение структурного типа (структуры)

complex1 var; //и переменной этого типа

 

extern complex funt(complex); //объявление функции, которая принимает
// в качестве аргумента и возвращает структуру

 

typedef complex point; //объявление типа point как синонима типа complex

 

extern int error_number; //объявление переменной типа int

int extern c; //верное !!! объявление переменной типа int

 

static int a; //определение статической переменной типа int

int static b; //верное !!! определение статической переменной типа int

Но аналогичная запись в классе (если static int а является компонентом класса) только объявляетпеременнуюа как статический компоненткласса.

 

float real(complex* p) { return p->re; }; //определение функции

 

const double pi = 3.1415926535897932385; //определение и инициализация переменной

double const pi1= 3.141592; //верное !!! определение и инициализация переменной

 

struct user; //объявление структурного типа user

 

template<class T>
abs(T x) { return х>0 ? -x : x; } //определение шаблона семейства функций

 

enum beer { Carlsberg, Tuborg, Thor }; //определение перечислимого типа beer и
//именованных констант

enum color {red, green=5, blue, black, white}; //определение перечислимого типа color и
//именованных констант

 

 

Определение и инициализация переменных целых типов

int k, ix, iy=1, iz; //определение и инициализация переменных
int i = 0xabcd, j=04567, k (1); //0xabcd – значение в 16-ой с/с; 04567 – в 8-ичной с/с
unsigned uk; // эквивалентно записи unsigned int uk;

short shk, shl, shm = 4; // эквивалентно записи short int shk, shl, shm=4;
unsigned short ushk; //в идентификаторе переменной как бы «кодируем» ее тип

long lk; // эквивалентно записи long int lk;
unsigned long ulk (12345); //определение и инициализация переменной

int iarray[10]; //определение массива из 10 значений элементов
// iarray[0] - iarray[9] типа int

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

Определение и инициализация переменных вещественных типов

float x = 4.7; //или float x (4.7);

double y = 3.141592, z = 0.6E-02;

float fx (3);

double dy (3.141592);

Определение и инициализация переменных булевского типа

bool b( true); // хотя компилятор не выдает ошибку и при инициализации bool b(1);

bool b1 = false;

bool b2 = bool (-25); //b2 получит значение true

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