Описание информационного объекта в программе
Определение и объявление объекта
Перед тем, как использовать информационный объект, его нужно описать (определить или объявить):
• Определения связывают информационные объекты программы с их идентификаторами, резервируют для объектов память и устанавливают их атрибуты.
• Объявления делают идентификаторы информационных объектов известными компилятору.
• В программе определение информационного объекта всегда одно, объявлений может быть несколько.
Описание является определением, если:
• содержит инициализатор;
• полностью описывает функцию (включает тело функции);
• описывает объединение или структуру (включая компоненты);
• описывает класс (включая его компоненты);
Описание является объявлением, если:
• описывает прототип функции;
• содержит спецификатор 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
Пример использования переменных булевского типа: