- •Подготовка программы к исполнению
- •Директива препроцессора #include
- •Математические функции из библиотеки cmath
- •Заголовок функции main
- •Объявление переменных.
- •Объявление переменных простого типа
- •Объявление констант простого типа
- •Перечисляемые переменные.
- •Логические операции
- •Операторы
- •Операторы сложные
- •Составной оператор
- •Структурированные операторы
- •Условный оператор.
- •Блок-схема оператора разветвления
- •Условная операция.
- •Операция «запятая» в операторе if.
- •Преобразование и привидение типов.
- •Оператор выбора варианта.
- •Блок-схема оператора варианта
- •Цикл по счётчику
- •Цикл c предусловием.
- •Цикл c постусловием.
- •Операторы передачи управления
- •1) Спецификации формата, которые определяются символом % - для выделения, контроля и преобразования соответствующих им введенных значений;
- •2) Любые символы, которые могут быть во входном потоке и которые надо игнорировать:
- •2) Первого символа, который не соответствует формату (например, буква или пробел после выделения числа); .
- •3) Заданной длины поля вводимого значения, если она определена в формате.
- •4.2.2. Форматы вывода данных
- •1) Спецификации формата, которые определяются символом % - для вывода .Значений, определенных списком аргументов, если они есть;
- •2) Любые символы, которые должны быть выведены в выходной поток;
- •2 Позиции отводятся для знака числа и точки.
- •Составные типы данных
- •Обработка двумерного массива
- •Указатели
- •Порядок выполнения операций над указателями
- •Арифметические операции над адресами
- •Операторы распределения памяти new и delete
- •Указатели и динамические массивы
- •Указатели и спецификатор const
- •Массивы указателей
- •Организация динамического двумерного массива
- •Функции работы со строками
- •Действия, производимые над строками и их правила Присвоение
- •Конкатенация строк
- •Копирование строк
- •Определяет длину строки
- •Указатели и строки
- •Введение в класс string
- •Структуры
- •Ссылочные переменные
- •Функции
- •Функции, имеющие возвращаемый параметр с помощью оператора return.
- •Объявление формальных параметров
- •Ввод - вывод записей
- •Дополнительные возможности работы с файлами
- •Работы с файлами и стандартный класс mfc cFileDialog.
- •Работа с файлами с помощью mfc( классы cFile, cStdioFile, ... ) и стандартный класс mfc cFileDialog.
- •Класс cFile
- •Класс cMemFile
- •Класс cStdioFile
- •Примеры записи и чтения из файла
Ссылочные переменные
Ссылка (reference) представляет собой видоизмененную форму указателей, которая используется в качестве псевдонима другой переменной. Для ссылок не требуется дополнительно памяти.
Пример объявления ссылочной переменной:
#include <iostream>
using namespace std ;
void main ()
{
int t = 13, //инициализация t
&r = t; //r синоним имени t
cout<<”Начальное значение t = ”<<t; //выводит 13
r +=10;
cout<<”Конечное значение t = ”<<t; //выводит 23
}
На переменные ссылочного типа накладываются ограничения:
нельзя взять адрес переменной ссылочного типа;
запрещается использовать массивы ссылок;
не допускается использовать ссылки на битовые поля;
нельзя создать указатель на ссылку.
Основное назначение ссылок:
их используют в качестве формальных параметров функции;
представляют собой удобную альтернативу указателям при обработке крупных структур посредством функций;
они играют важную роль при создании классов.
Функции
Функция (function) представляет собой именованный законченный алгоритм, который может неоднократно выполняться в различных местах программы с разными исходными данными, возвращая различные результаты своей работы. Тело функции может сохраняться как в теле основной программы, так и в отдельном файле. Файл может представлять собой библиотеку программиста или пользователя.
Библиотеки функций позволяют:
использовать одни и те же функции разными программистами;
повысить структурированность и наглядность программы;
облегчить написание и отладку программы.
Любая программа на языке С++ содержит одну главную функцию “main” и любое количество других авторских или служебных функций. Действие программы имеющей подпрограммы, начинаются с главной функции “main”. Подпрограмма выполняется только после вызова. Для того чтобы в точке вызова функции была видна функция, ее описание должно находиться выше блока вызываемой функции. При создании функций надо определить:
класс памяти и видимость переменных функций;
определение функций (тексты функций);
объявление функции;
вызов функции;
способы обмена данными различных типов между функциями.
Определение функции – это текст, который содержит заголовок и тело функции. Тело функции – это блок, в котором определяется тип внутренних переменных и операторы тела функции. Структура функции идентична главной функции “main”.
Структура заголовка функции:
[спецификатор класса памяти] [тип возвращаемого параметра] имя_функции ([список формальных параметров])
спецификатор класса памяти – спецификатор, который определяет класс памяти функции;
тип возвращаемого параметра – определяет тип результата, возвращаемого функцией в точку вызова с помощью оператора return. Тип результата, может быть, простой или указатель на любой структурированный тип;
имя_функции – уникальный идентификатор, с помощью которого функция вызывается для выполнения;
список формальных параметров – определяется тип и имена формальных параметров-переменных функции, с помощью которых производится обмен данными между вызываемой и вызывающей функциями в процессе выполнения программы.
Элементы заголовка функции в квадратных скобках необязательны.
Область видимости функции является файл, где находится её определение. Код функции закрыт и недоступен для других функций. Данные, определенные внутри какой-либо функции, никак не взаимодействуют с данными из другой функции, поскольку область видимости каждой функции индивидуальна. Переменные, которые определены в теле функции, называются локальными. Они автоматически создаются при входе в функцию и автоматически уничтожаются при выходе из нее. Такая организация переменных называется автоматической. Локальные переменные не сохраняют свои значения между вызовами функции. Если функция находится в одном файле с главной функцией, то тело функции или её прототип должны находиться выше вызываемой функции.
Структура прототипа функции:
[спецификатор класса памяти] [тип возвращаемого параметра] имя_функции ([список формальных параметров]);
Прототип функции – это оператор, поэтому он должен завершаться точкой с запятой. Простейший способ получить прототип – скопировать заголовок функции из её определения и добавить точку с запятой. Однако прототип функции не требует предоставления имен формальных параметров, достаточно списка типов. Имена переменных в прототипе служат указанием места аргумента, поэтому если они заданы, то не обязательно должны совпадать с именами в определении функции. Прототип описываются выше вызывающе функции , а его блок описываются ниже. Прототипы функций должны находиться в той же последовательности, что и тела функций.
Пример функции, возвращающей значение в точку вызова
#include <iostream>
#include <cmath>
using namespace std ;
// прототипы функций
long double fact ( const int ) ;
double cube(double x);
// главная функция
void main ( )
{
int x = 8 ;
cout << fact ( x ) << endl ;
x = fact ( x ) ; cout << x << endl ;
long double y ;
y = fact ( 150 ) ; cout << y << endl ;
cout<<”Введите целее число до 10”;
cin>> x;
cout<<”Куб числа ”<< x<<” = ”<<cube(x);
cout<<”Куб числа ”<< 1.2<<” = ”<<cube(1.2);
}
// определение вычисления
long double fact ( const int n)
{
int I (n);//переменная I инициализируется значением //переменной n
long double res = 1 ;
while ( i > 1 ) res *= i-- ;
return res ;//тип переменной res совпадает с типом //возвращаемого параметра
}
double cube(double x)
{
return pow(x,3); //в операторе return присутствует //выражение типа double
}
Прототип функции описывает интерфейс функции для компилятора, он сообщает компилятору, коков тип возвращаемого значения, а также количество и типы формальных параметров. Когда функция cube(x) завершает вычисление, она помещает возвращаемое значение в некоторое определенное место (либо в регистр ЦП, а возможно в ОП), затем вызывающая функция (void main ( )) извлекает значение из этого места. Т.К. прототип устанавливает, что cube() возвращает тип double, компилятор знает, сколько байт следует извлечь и как их интерпретировать. Прототипы так же снижают вероятность ошибок в программе. Они обеспечивают следующее:
компилятор корректно обрабатывает возвращаемое значение:
компилятор проверяет, указано ли правильное количество аргументов;
компилятор проверяет правильность типов аргументов, если тип не подходит, то компилятор выполняет преобразование типов, если в этом есть смысл.
Прототипирование происходит во время компиляции и называется статическим контролем типов.
Функции, по способу возврата результата, делятся на две группы:
возврат результата в точку вызова;
и по адресам формальных переменных.