Распечатка исходных данных и результатов выполнения программы
Для результатов должен быть напечатан соответствующий текст.
Решить систему неравенств:
При а1=2, а2=4, b1=-1, b2=6,
В результате работы программы:
Введите а1: 2
Введите b1: 4
Введите а2: -1
Введите b2: 6
2x+4<0
-1x+6<0
Ответ: X<-1.5
Лабораторная работа № 9
«ПОЛИМОРФИЗМ В ОБЪЕКТНО-ОРИЕНТИРОВАННОМ ПРОГРАММИРОВАНИИ. ПЕРЕГРУЗКА ФУНКЦИЙ.»
Цель. Получить практические навыки реализации перегрузки функций на С++.
Краткое теоретическое введение
Перегрузка функций является одной из особенностей ООП, отражающее свойство полиморфизма. Перегрузка функций (function overloading) позволяет определять несколько функций с одним и тем же именем, если эти функции имеют различное количество и(или) типы аргументов. Перегрузка функций обычно используется для создания функций, предназначенных для выполнения однотипных задач, оперирующих с различными структурами и типа данных. Не являются перегруженными функции, которые имеют одинаковый список аргументов и различные типы возвращаемых значений. При вызове перегруженной функции компилятор определяет адрес вызова нужной функции путем анализа количества, типа и порядка следования аргументов функции. Каждая перегруженная функция имеет свой уникальный идентификатор, называемый сигнатурой.
Цель перегрузки функций состоит в том, чтобы функция с одним именем по-разному выполнялась и возвращала разные значения при обращении к ней с разными по типам и количеству фактическими параметрами. Например, может потребоваться функция, возвращающая максимальное из значений элементов одномерного массива, передаваемого ей в качестве параметра. Массивы, использованные как фактические параметры, могут содержать элементы разных типов, но пользователь функции не должен беспокоиться о типе результата. Функция всегда должна возвращать значение того же типа, что и тип массива - фактического параметра.
Для обеспечения перегрузки функций необходимо для каждого имени определить, сколько разных функций связано с ним, т.е. сколько вариантов сигнатур допустимы при обращении к ним. Предположим, что функция выбора максимального значения элемента из массива должна работать для массивов типаint, long, float, double. В этом случае придется написать четыре разных варианта функции с одним и тем же именем.
Распознавание перегруженных функций при вызове выполняется по их сигнатурам. Перегруженные функции поэтому должны иметь одинаковые имена, но спецификации их параметров должны различаться по количеству и (или) по типам, и (или) по расположению.
При использовании перегруженных функций нужно с осторожностью задавать начальные значения их параметров.
Для обеспечения перегрузки функций необходимо для каждого имени функции определить сколько различных функций с ним связано.
Пример:
#include <iostream.h>
int max_element ( int n, int a[ ])
// находит максимальный элемент для массива типа int
{
int max=a[0];
for ( i=1; i<n; i++)
if (a[i]>max) max=a[i];
return max;
}
long max_element ( int n, long a[ ])
// находит максимальный элемент для массива типа long
{
long max=a[0];
for ( i=1; i<n; i++)
if (a[i]>max) max=a[i];
return max;
}
double max_element ( int n, double a[ ])
// находит максимальный элемент для массива типа double
{
double max=a[0];
for ( i=1; i<n; i++)
if (a[i]>max) max=a[i];
return max;
}
float max_element ( int n, float a[ ])
// находит максимальный элемент для массива типа float
{
float max=a[0];
for ( i=1; i<n; i++)
if (a[i]>max) max=a[i];
return max;
}
void main ( )
{
int x[]={10, 20, 30, 40, 50, 60};
long y[]={12, 44, 22, 37,30};
. . . . . .
int m1=max_element(6, x );
long m2=max_element(5, y);
. . . . .
}
Постановка задачи
Написать перегруженные функции и основную программу, которая их вызывает.
Варианты
Вариант 1.
а) для сложения целых чисел;
б) для сложения комплексных чисел.
Вариант 2.
а) для сложения вещественных чисел;
б) для сложения комплексных чисел.
Вариант 3.
а) для умножения целых чисел;
б) для умножения комплексных чисел.
Вариант 4.
а) для вычитания целых чисел;
б) для вы Вариант
читания комплексных чисел.
Вариант 5.
а) для умножения вещественных чисел;
б) для умножения комплексных чисел.
Вариант 6.
а) для вычитания вещественных чисел;
б) для вычитания комплексных чисел.
Вариант 7.
а) для деления целых чисел;
б) для деления комплексных чисел.
Вариант 8.
а) по номеру года выдает его название по старояпонскому календарю.
б) по названию месяца выдает знак Зодиака.
Вариант 9.
а) для сложения десятичных дробей;
б) для сложения обыкновенных дробей.
Вариант 10.
а) для вычитания десятичных дробей;
б) для вычитания обыкновенных дробей.
Вариант 11.
а) для умножения десятичных дробей;
б) для умножения обыкновенных дробей.
Вариант 12.
а) для деления десятичных дробей;
б) для деления обыкновенных дробей.
Вариант 13.
а) для преобразования десятичной дроби в обыкновенную;
б) для преобразования обыкновенной дроби в десятичную.
Вариант 14.
а) для вычисления площади треугольника;
б) для вычисления площади прямоугольника;
в) для вычисления площади квадрата.
Вариант 15.
а) десятичные числа[1] возводит в степень n;
б) из целых чисел извлекает квадратный корень (или для сложности корень степени n).
16 Вариант.
Вывода элементов в обратном порядке
а)для чисел
б)для строки (слова)
Вариант 17.
а) для массива целых чисел находит среднее арифметическое;
б) для строки (слова) находит количество букв, содержащихся в ней.
Вариант 18.
а) для массива целых чисел находит максимальный элемент;
б) для строки находит длину самого длинного слова.
Вариант 19.
а) для массива целых чисел находит минимальный элемент;
б) для строки находит длину самого короткого слова.
Вариант 20.
а) для массива целых чисел находит количество четных элементов;
б) для строки находит количество слов, начинающихся на букву «а».
Вариант 21.
а) для массива целых чисел находит количество отрицательных элементов;
б) для строки находит количество слов, заканчивающихся и начинающихся на одну и ту же букву.
Вариант 22.
а) для массива целых чисел находит количество нечетных элементов;
б) для строки находит количество слов в ней.
Вариант 23.
а) для массива начинающегося на четное число выполняет циклический сдвиг влево на количество элементов равное первому элементу массива.
б) для массива начинающегося на нечетное число выполняет циклический сдвиг вправо на количество элементов равное последнему элементу массива.
Вариант 24.
а) для массива целых чисел заменяет все четные элементы из массива нулями;
б) для строки удаляет все четные слова.
Вариант 25.
а) выводящую на экран информацию о дате в числовом виде;
б) выводящую на экран информацию о дате в строковом виде;