Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Значения параметров по умолчанию
В C++ при вызове функций можно опускать параметры. В таких случаях для опущенных параметров будут использоваться значения по умолчанию. Обеспечение значений по умолчанию для параметров упрощает возможность повторного использования функций (их использования несколькими программами). Для обеспечения значения по умолчанию необходимо присваивать значение параметру с помощью оператора присваивания С++ прямо при объявлении функции, как показано ниже: void some_function(int size=12, float cost=19.95) //----> Значения по умолчанию { } Использование библиотек функций Применение библиотечных функций сокращает объем программирования, который программист должен выполнить самостоятельно. Вместо этого программа просто вызывает функции библиотеки этапа выполнения. В зависимости от компилятора библиотека этапа выполнения может состоять из тысяч функций. Ранее было сказано, что до того, как программа сможет вызвать функцию, компилятор C++ должен узнать определение или прототип функции. Поскольку функции библиотеки этапа выполнения не определены в основной программе, необходимо указать прототип для каждой библиотечной функции, которую намерен использовать программист. Для упрощения использования библиотечных функций компилятор C++ предоставляет заголовочные файлы, содержащие корректные прототипы. Таким образом, программам необходимо просто включить требуемый заголовочный файл с помощью оператора #include, а затем вызвать необходимую функцию. Например, следующая программа будет использовать функции библиотеки этапа выполнения time и ctime для вывода текущей системной даты и времени. Прототипы этих двух функций библиотеки этапа выполнения содержатся в заголовочном файле time.h: #include < iostream.h> void main(void) { Порядок выполнения работы 1. Ознакомиться с теоретическими сведениями. 2. Получить вариант задания у преподавателя. 3. Выполнить задание. 4. Продемонстрировать выполнение работы преподавателю. 5. Оформить отчет. 6. Защитить лабораторную работу. 4. Требования к оформлению отчета Отчет по лабораторной работе должен содержать следующие разделы: · титульный лист; · цель работы: · задание на лабораторную работу; · техническое описание выполненного задания; · ответы на контрольные вопросы; · выводы по проделанной работе. Задание на работу 1. Напишите функцию вычисления произведения двух целых чисел. Перегрузите функцию для работы с тремя и четырьмя целыми числами и числами с плавающей точкой. Вынести объявления функций в отдельный заголовочный файл и использовать функции до их определения. Продемонстрировать в программе работу всех функций. 2. Напишите функцию составления двухзначного числа из переданных ей в качестве параметра двух целых чисел – цифр (например, 3 + 7 = 37). Перегрузите функцию для работы с тремя и четырьмя целыми числами (соответственно результат – трех и четырехзначные числа). Вынести объявления функций в отдельный заголовочный файл и использовать функции до их определения. Продемонстрировать в программе работу всех функций. 3. Напишите функцию поиска максимального из двух целых чисел. Перегрузите функцию для работы с тремя и четырьмя целыми числами и числами с плавающей точкой. Вынести объявления функций в отдельный заголовочный файл и использовать функции до их определения. Продемонстрировать в программе работу всех функций. 4. Напишите функцию поиска среднего арифметического из двух целых чисел. Перегрузите функцию для работы с тремя и четырьмя целыми числами и числами с плавающей точкой. Вынести объявления функций в отдельный заголовочный файл и использовать функции до их определения. Продемонстрировать в программе работу всех функций. 5. Напишите функцию поиска НОД двух целых чисел (например, алгоритмом Евклида). Перегрузите функцию для работы с тремя и четырьмя целыми числами и числами с плавающей точкой. Вынести объявления функций в отдельный заголовочный файл и использовать функции до их определения. Продемонстрировать в программе работу всех функций. 6. Напишите функцию поиска НОК двух целых чисел. Перегрузите функцию для работы с тремя и четырьмя целыми числами и числами с плавающей точкой. Вынести объявления функций в отдельный заголовочный файл и использовать функции до их определения. Продемонстрировать в программе работу всех функций. 6. Контрольные вопросы 1. Чем отличается прототип и определение функции? 2. Как указать значения параметров функции по умолчанию? 3. Для чего нужны прототипы функций? 4. Каким образом реализуется задача, когда необходимо изменять значения передаваемых функции параметров? 5. Что такое перегрузка функций? 6. Что такое формальные и фактические параметры?
Лабораторная работа № 5. Цель работы Освоение методов программирования с использованием структур, перечислений и объединений. Теоретические сведения Общие сведения Структуры Синтаксис объявления структуры Struct имя {последовательность_объявления_членов-данных_и методов}; Пример объявления структуры. Struct s {int a, b; Void wrt(){cout< < a< < ” ”< < b< < endl; }} Пример 1. struct s {int a, b; void wrt(){cout< < a< < " " < < b< < endl; }}; int _tmain(int argc, _TCHAR* argv[]) { s s1; s1.a=4; s1.b=5; s1.wrt(); return 0; } Для структурного типа переменная может быть указательного типа. Пример 2 sp= new s; sp-> a=3; sp-> b=4; sp-> wrt(); delete sp; Для структурного типа могут быть предусмотрены конструкторы, которые позволяют при объявлении переменных использовать инициализацию, а также применять присваивание констант структурного типа. Пример 3. struct v { int a, b; //конструкторы v(int at, int bt){a=at; b=bt; } v(){a=b=0; } //методы void prn(){cout< < " v:: " < < a< < " " < < b< < endl; } }; int _tmain(int argc, _TCHAR* argv[]) { v tv(7, -1); tv.prn(); tv=v(2, 3); //присваивание константы return 0; } Для структурного типа для членов-данных память может выделяться динамически. В этом случае должны быть предусмотрены деструкторы, которые позволяют при разрушении переменных структурного типа правильно производить операции с динамической памятью. Пример 3. struct arr { int *a, n; arr(int n) {a=new int [n]; } //деструктор ~arr(){delete []a; } }; int _tmain(int argc, _TCHAR* argv[]) { int n=5; arr y(n); for(int i=0; i< n; i++)y.a[i]=i+1; for(int i=0; i< n; i++) cout < < y.a[i]< < " "; cout< < endl; y.~arr(); //принудительный вызов деструктора return 0; } Для структурного типа могут быть спроектированы операции. В этом случае структурные переменные могут быть использованы как операнды выражений. Пример 5. struct vect { float x, y; //конструкторы vect(float xt, float yt){x=xt; y=yt; } vect(){x=y=0; } //методы void prn(){cout< < " vect:: " < < x< < " " < < y< < endl; } //операторы vect operator + (vect v2) {vect v1=*this; return vect(v1.x+v2.x, v1.y+v2.y); } }; int _tmain(int argc, _TCHAR* argv[]) { vect t1, t2, t3; t1=vect(1, 2); t2=vect(-3, 2); t3=t1+t2; t3.prn(); return 0; } Объединения Объединения позволяют размещать данные разных типов по одному адресу в памяти, т.е. данные размещаются в одном месте в памяти, но трактовать их можно по-разному. Пример 6. #include " stdafx.h" #include < iostream> using namespace std; union u1{char a[2]; short int b; }; int _tmain(int argc, _TCHAR* argv[]) { u1 tu; tu.b=0x1234; cout< < " union tu.a: " < < hex< < (int)tu.a[0]< < " " < < hex< < (int)tu.a[1]< < endl; cout< < " union tu.b: " < < hex< < tu.b< < endl; //union tu.a: 34 12 //union tu.b: 1234 return 0; } Перечисления Перечисления позволяют кодировать осмысленные имена целыми числами. Пример 7. Pragma region enum enum color{red, white, green}; #pragma endregion int _tmain(int argc, _TCHAR* argv[]) { color tc1, tc2, tc3; tc1=red; tc2=green; cout< < ”tc1=”< < tc1< < ” “< < ”tc2=”< < tc2< < endl; //tc1=0 tc2=2 return 0; Порядок выполнения работы 7. Ознакомиться с теоретическими сведениями. 8. Получить вариант задания у преподавателя. 9. Выполнить задание. 10. Продемонстрировать выполнение работы преподавателю. 11. Оформить отчет. 12. Защитить лабораторную работу. 7. Требования к оформлению отчета Отчет по лабораторной работе должен содержать следующие разделы: · титульный лист; · цель работы: · задание на лабораторную работу; · техническое описание выполненного задания; · ответы на контрольные вопросы; · выводы по проделанной работе. Задание на работу 1. Cпроектировать структуру stack (стек LIFO) для использования в программах. Хранилище данных – статический массив. 2. Cпроектировать структуру stack (стек LIFO)для использования в программах. Хранилище данных – динамический массив. 3. Cпроектировать структуру queue (очередь FIFO) для использования в программах. Хранилище данных – статический массив. 4. Cпроектировать структуру queue (очередь FIFO) для использования в программах. Хранилище данных – динамический массив. 5. Cпроектировать структуру типа бинарное дерево для использования в программах. Хранилище данных – статический массив. Порядок обхода – левое поддерево-правое поддерево- узел. 6. Cпроектировать структуру типа бинарное дерево для использования в программах. Хранилище данных – динамический массив. Порядок обхода – правое поддерево-левое поддерево- узел. 7. Cпроектировать структуру типа бинарное дерево для использования в программах. Хранилище данных – статический массив. Порядок обхода – левое поддерево- узел-правое поддерево. 8. Cпроектировать структуру типа бинарное дерево для использования в программах. Хранилище данных – динамический массив. Порядок обхода – правое поддерево-узел-левое поддерево. 6. Контрольные вопросы 1. Чем отличается прототип и определение функции? 2. Как указать значения параметров функции по умолчанию? 3. Для чего нужны прототипы функций? 4. Каким образом реализуется задача, когда необходимо изменять значения передаваемых функции параметров? 5. Что такое перегрузка функций? 6. Что такое формальные и фактические параметры? Лабораторная работа № 6. Цель работы Освоить методы ввода-вывода из библиотеки ввода-вывода, описанную стандартом ANSI C. Теоретические сведения Популярное:
|
Последнее изменение этой страницы: 2016-05-03; Просмотров: 848; Нарушение авторского права страницы