- •Лекция 3 Базовые и производные типы
- •Представление данных
- •Атрибуты данных
- •Типы данных
- •Базовые типы
- •Производные типы
- •Скалярные типы
- •Примеры описаний программных объектов
- •Структурированные типы
- •Описание информационного объекта в программе Определение и объявление объекта
- •Определение и инициализация переменных целых типов
- •Определение и инициализация переменных вещественных типов
- •Определение и инициализация переменных булевского типа
- •Определение и инициализация переменных символьного типа
- •Определение и инициализация переменных-указателей
- •Определение и инициализация переменных-ссылок
- •Форматы некоторых производных типов и их интерпретация
- •Класс памяти информационного объекта
- •Область действия идентификатора информационного объекта программы
- •Примеры использования переменных разных классов памяти
- •Пространство имен
- •Основные правила написания и оформления программ
Примеры использования переменных разных классов памяти
1.
//файл my_main.cpp
#include <iostream.h>
int a; //определение глобальной переменной a static long li; //определение статической глобальной переменной li int main ()
{ int b; // определение локальной переменной b extern int x; //объявление переменной х, определение ее где-то в другом месте static int c; // определение статической локальной переменной с a = 1; //присваивание глобальной переменной а int a; //определение локальной переменной а a = 2; //присваивание локальной переменной а ::a = 3; //присваивание глобальной переменной а //(:: – это операция изменения области видимости cout << a << endl; //вывод локальной переменной
cout << ::a << "\n"; //вывод глобальной переменной
return 0;
}
2.
//файл my_main_1.cpp
#include <stdio.h>
int i=0; // глобальная переменная i определена в файле со значением 1
void main() { auto int i=1; //локальная переменная i определена в функции main со значением 1 printf (”%d”, i); // 1 { int i=2; // локальная переменная i определена в блоке { } со значением 2 printf (%d”, i); // 2 { i +=1; // в блоке { } действует определение i из объемлющего блока { } printf (”%d”, i); // 3 } printf (”%d”, i); // 3, продолжает действовать определение блока { } } printf (”%d”, i); // 1, в блоке функции main i =1 }
3.
Область действия может превышать область видимости:
{ int i; //автоматическое распределение памяти по умолчанию char ch; // int i и char ch в области действия блока { } и видимы i=3; …… { double i; // double i в области действия блока { } и видима i=3.0; // int i хотя и в области действия блока { }, но скрыта ch=’A’; // char ch в области действия блока { } и видима } i+=1; // int i в области действия блока { }, видима и равна 4 ……. // double i вне области действия блока { } ……. // char ch в области действия блока { }, видима и равна ’A’ } …… // int i и char ch вне области действия блока { }
4.
Пример соотношения областей видимости и действия в проекте на основе двух файлов:
//файл f1.cpp
#include <iostream.h>
int m = 10; //определение глобальной переменной
double x = 100.56; //определение глобальной переменной
extern int func1 (); //объявление функции, определенной в другом файле
extern double func2 (); // объявление функции, определенной в другом файле
int main () {
сout << m << " " << func1() << endl; // 10 100
cout << x << " " << func2() << endl; // 100.56 110.56
return 0; }
//файл f2.cpp
extern int m; // объявление переменной, определенной в другом файле
extern double x; // объявление переменной, определенной в другом файле
int func1 () { return m * m; } //определение функции
double func2 () { return x + m; } //определение функции
5.
Пример изменения 1 в проекте на основе двух файлов:
//файл f12.cpp
#include <iostream.h>
static int m = 10; //определение только в этом файле глобальной статической переменной
double x = 100.56; //определение в файле глобальной переменной
extern int func1 (); //объявление функции, определенной в файле f22.cpp
extern double func2 (); // объявление функции, определенной в файле f22.cpp
int main () {
cout << "main m=" << m << " " << func1() << endl; // 10 4 cout << x << " " << func2() << endl; // 100.56 102.56
return 0; }
//файл f22.cpp
int m=2; // определение в файле глобальной переменной m
extern double x; // объявление переменной х, определенной в файле f12.cpp // extern int i, например, даст ошибку, т.к. i не определено в файле f12.cpp
int func1 () {return m * m; } //определение функции, m=2
double func2 () { return x + m; } // определение функции m=2; x=100.56
