ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 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;

}

Перезагрузка функций. Одно из новейших средств С++ - шаблоны функций.