ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 03.03.2021
Просмотров: 585
Скачиваний: 1
cin>>lin;
cout<<"Оценка с помощью алгоритма batsy\n";
estimate(lin,batsy);
cout<<"Оценка с помощью алгоритма pam\n";
estimate(lin,pam);
_getch();
return 0;
}
double batsy(int lns)
{
return 0.05*lns;
}
double pam(int lns)
{
return 0.03*lns + 0.0004*lns*lns;
}
void estimate(int lines, double (*pf)(int))
{
cout<<"Для написания "<<lines<<" строк необходимо ";
cout<<(*pf)(lines)<<" часов.\n";
}
Перезагрузка функций. Перезагрузка функций (полиморфизм) обеспечивает возможность использования нескольких функций с одни именем. Список аргументов в функции называют сигнатурой функции. В С++ возможно представить две функции с одинаковыми именами, только при разных сигнатурах. Ссылка на тип и сам тип имеют одну и ту же сигнатуру.
Пример.
#include <iostream>
#include <conio.h>
using namespace std;
unsigned long left(unsigned long num, unsigned ct);
char * left(const char * str, int n = 1);
int main()
{
setlocale(LC_ALL,"Russian");
char * trip = "Программа";
unsigned long n = 123456789;
int i;
char * temp;
for (i = 1; i < 10; i++)
{
cout << left(n, i) << endl;
temp = left(trip,i);
cout << temp << endl;
delete [] temp;
}
_getch();
return 0;
}
unsigned long left(unsigned long num, unsigned ct)
{
unsigned digits = 1;
unsigned long n = num;
if (ct == 0 || num == 0)
return 0; // возврат нуля если нет цифр
while (n /= 10)
digits++;
if (digits > ct)
{
ct = digits - ct;
while (ct--)
num /= 10;
return num;
}
else
return num;
}
// Функция возвращающая указатель на строку
char * left(const char * str, int n)
{
if(n < 0)
n = 0;
char * p = new char[n+1];
int i;
for (i = 0; i < n && str[i]; i++)
p[i] = str[i];
while (i <= n)
p[i++] = '\0';
return p;
}
Перезагрузка функций. Одно из новейших средств С++ - шаблоны функций.