cout << "unsigned long = "<<toa(3456789000UL,str,r)<< “\n”;}
В примере вызов той или иной функции будет инициироваться в зависимости от типа первого передаваемого аргумента. Все функции возвращают указатель на полученную строку. Протокол работы программы может быть следующий:
Задайте систему счисления от 2 до 36.
10 <ввод>
int = 3248
long = 773681
unsigned loug = 3456789000
Рассмотрим еще один пример перегрузки функций.
Представим, что в некоторой задаче необходим следующий алгоритм: если числа, с которыми оперирует функция, целые, выполняется сложение чисел, если числа вещественные, функция вычитает числа. Данный алгоритм в С++ можно реализовать следующим способом:
#include <iostream.h> // первое описание функции
iut fun (int i, int j)
{ cout << "функция оперирует целыми числами\n";
return i+j;} // второе описание функции
double fun (double i, double j)
{ cout << "функция оперирует вещественными числами\n"; return i-j; }
void main (void) {Cout << "2+3 = " << fun (2,3) << "\n"; // целыечисла
cout<<"2.50-3.6="<< fun (2.5,3.6) << "\n" ;} // вещественные числа.
Использование перегруженных функций упрощает разработку программ, улучшает их мобильность, читаемость, сокращает число библиотечных функций. Наиболее распространенный случай использования перегруженных функций - перегрузка конструктора. Такая перегрузка обеспечивает несколько вариантов создания новых объектов класса.
Пример перегрузки конструктора:
#include <iostream.h>
class Over { int i;
char *str; public:
Over() { str = "первый конструктор\n"; i = 0; }; // это первый конструктор
Over(char *S) { str = S; i = 50; };
//это второй конструктор, строка символов может задаваться
// извнеметодовкласса
Over(char *S,int X) { str = S; i = X; };
//это третий конструктор, принимающий параметры S и Х
// и инициализирующий частные переменные класса
Over(int *Y) { str = "четвертый конструктор\n"; i = *Y; };
//конструктор принимает в качестве
//параметра указатель и присваивает значение, извлекаемое
// из переданного адреса, частной переменной i.
void print(void) { cout << "i = " << i << "; str = " << str; }};
//объявление и определение метода класса
void main(void) { int a = 10,*b; //переменная типа int и указатель на тип int
b = &a; //инициализация указателя адресом переменной
//объявление четырех объектов: my_over, my_over1 и my_over2;
Over my_over, //для конструктора без параметров
my_over1("для конструктора с одним параметром\n"),
my_over2("для конструктора с двумя параметрами\n",100),
my_over3(b); // для конструктора с указателем
//вызовы метода print() для объектов:
my_over.print(); // для объекта, созданного конструктором Over()
my_over1.print(); // для объекта, созданного конструктором Over(char *S)
my_over2.print(); // для объекта, созданного конструктором Over(char *S,int X)
my_over3.print(); // для объекта, созданного конструктором Over(int *Y) }
В примере определено 4 конструктора: без параметров, с одним параметром - ссылкой на тип строка, с двумя параметрами и с одним параметром - ссылкой на int.
Объявление четырех экземпляров объектов класса приводит к вызову соответствующих конструкторов и инициализации данных информацией, передаваемой при объявлении объектов.
Результат работы программы:
i = 0 ; str = первый конструктор
i = 50; str = для конструктора с одним параметром
i = 100;str = для конструктора с двумя параметрами
i = 10; str = четвертый конструктор
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.