- •Рязанская государственная радиотехническая академия Объектно-ориентированное программирование
- •Рязань 2003
- •390005, Рязань, ул. Гагарина, 59/1.
- •1. Программирование линейных алгоритмов Основные понятия
- •Идентификаторы
- •Объявление переменных
- •Стандартные типы данных
- •Представление констант
- •Символьные константы
- •Строковые константы
- •Ввод – вывод данных
- •Математические функции
- •Контрольные вопросы
- •Варианты заданий
- •2. Программирование алгоритмов разветвляющейся структуры Операторы управления
- •Контрольные вопросы
- •Цикл с параметром
- •Контрольные вопросы
- •Варианты заданий
- •4. Массивы. Классы памяти переменных Классы памяти переменных
- •Распределение памяти
- •Массивы
- •Инициализация
- •Указатели
- •Связь одномерных массивов с указателями
- •Связь двумерных массивов с указателями
- •Динамические массивы
- •Контрольные вопросы
- •Варианты заданий
- •5. Функции пользователя
- •Передача параметров в функции
- •Шаблоны функций
- •Контрольные вопросы
- •Варианты заданий
- •6. Структуры, объединения, битовые поля Структуры
- •Объединение
- •Битовые поля
- •Контрольные вопросы
- •Варианты заданий
- •7. Файлы
- •Типовые операции с файлами
- •Функции форматного ввода и вывода данных
- •Определение длины файла:
- •Спецификаторы доступа
- •Конструкторы и деструкторы
- •Наследование
- •Наследование и контроль доступа
- •Указатель this
- •Перегрузка операций
- •Константные объекты и константные методы
- •Статические элементы класса
- •Виртуальные функции
- •Абстрактные классы
- •9. Варианты заданий на курсовое проектирование
- •Оглавление
Контрольные вопросы
Что определяет класс памяти переменной?.
Что такое массив?
Приведите пример описания одномерного и двумерного массивов.
Рассажите об операции индексации.
Что такое указатель? Приведите пример использования указателей.
Какая существует связь между одномерным массивом и указателем?
Какие существуют функции динамического распределения памяти в С++?
Приведите пример использования функции malloc.
Какие в С++ существуют функции для работы со строковым типом данным?
Варианты заданий
Модифицировать программу
вычисления значения функции
из лабораторной работы № 3.
Написать программу табулирования функции (вывода таблицы значений аргумента и соотетсвтвующего значения функции). Таблицу значений функции описать в виде двумерного массива, в котором в первый столбец записывается значение аргумента, а во второй – соответствующее значение функции. Заполнение массива реализовать в виде цикла с параметром. Реализовать поиск максимального, минимального, среднего арифметического значения элементов второго столбца массива (значений функции).
5. Функции пользователя
Существует две категории:
объявление (прототип). Используется, если вызов функции предшествует объявлению. Объявление представляет собой заголовок функции. В этом заголовке должны быть указаны:
тип возвращаемого функцией значения;
имя функции (идентификатор);
в круглых скобках типы и имена формальных параметров;
объявление заканчивается ‘;’;
определение. Включает в себя заголовок и блок (‘;’ после блока не ставится). Внутри блока находятся описания локальных переменных и код реализации функции (т.е. действия). Блок заключается в фигурные скобки.
Функция может вызываться в операторе присваивания, в качестве параметров других функций, и самостоятельно (как процедура в Паскале).
Функции в С++ равноправны, любая функция может быть вызвана из любой другой, допускается рекурсивный вызов функций.
Функция main представляет собой точку входа в программу (т.е. ее компилятор запускает первой).
Для возврата результата функции используется зарезервированное слово return с последующим выражением, которое подсчитывается, и его результат ставится в соответствие с вызовом функции.
Передача параметров в функции
1. По значению:
Параметры, передаваемые по значению, являются входными, т.е. изменить их в функции и возвратить назад в программу нельзя.
Пример: функция сложения чисел.
int Sum(int x, int y)
{int S;
S= x + y;
return(S); }
Вызов такой функции: Sum(x1, y1).
2. По адресу:
Например, необходимо возвратить из функции 2 значения. Передаются не значения параметров, а их адреса.
Пример: Функция обмена двух переменных.
void Obmen (int*x, int *y)
{int temp; temp = *x;
*x = *y;
*y = temp;}
Вызов такой функции: Obmen (&x1,&y1).
3. По ссылке:
void Swap(int &p1, int &p2)
{int temp;
temp = p1;
p1=p2;
p2 = temp;}
Вызов такой функции: Swap(x1,y1).
Параметры по умолчанию
Пусть объявлена некоторая функция
float f(float a; float b=5; float c=0){}.
Вызов такой функции может быть следующим:
f(4,6,8); f(4,6); f(4);
Неправильным будет вызов f(4,,3), поэтому рекомендуется сдвигать параметры, имеющие значения по умолчанию, в заголовке функции вправо.
Встроенные функции
Вводятся при помощи спецификатора inline и используются для повышения быстродействия.
inline float Sum(float a1,float a2) {return a1+a2;}
Вызов осуществляется не через стек, а подстановкой кода функции в место ее вызова.
Ограничения:
- 5 операторов максимум; - не должно быть операторов цикла; переключателей и goto.
Перегрузка функций
В языке С++ можно определить несколько одноименных функций, отличающихся количеством и типом параметров. Нельзя перегружать функцию, если она отличается только типом возвращаемого значения.
Пример перегрузки функции:
определить одноименные функции, которые считают площади круга и треугольника.
float S(float r) // площадь круга
{puts(“s круга “);
return 3.14*r*r}
float S(float x, float H)
{puts (“s треугольника”);
return 1\2 * x*H}
Параметры функции main
int main (int argc, char * argv[ ] ) argv[ ] - массив символьных строк из командной строки DOS
argv[ 0] - полное имя файла с маршрутом к каталогу, где хранится программа. argv[ 1] - первый параметр после имени программы в командной строке, argv[ 2] - второй и т.д.
Параметр argc определяет количество параметров в командной строке, не может быть меньше 1.
Передача функции в качестве параметра.
Имя функции – адрес на начало ее кода в оперативной памяти. Для хранения таких адресов необходимо определить указатель на функцию. Это можно сделать, определив тип функции и затем объявить указатель на этот тип:
typedef float ft (float) ; ft *ftp;
Возможна другая запись:
typedef float(*ftp)(float)
объявление типа – указателя на функцию, возвращающую значение типа float и имеющую 1 параметр типа float.
Пример: программа с меню из двух пунктов
typedef void(*mn)( );
mn M_c[2]
void vb1( )
{ puts (“Выбор 1”); getchar ( );}
void vb2 ( )
{ puts (“Выбор 2”); getchar( );}
void b_t ( )
{ M_c [0] = vb1;
M_c [1] = vb2;}
main (void)
{ int c ;
b_t ( );
do { puts (“Выбор 1”);
puts(“Выбор 2”);
puts(“Выход “);
cin<<c;
if (c >=1 && c<=2)
(*M _c [ c- 1 ]) ( );
else break;}
while (1);}
