Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Перегрузка функций и операций.doc
Скачиваний:
21
Добавлен:
01.05.2025
Размер:
144 Кб
Скачать
☆

Void que::add(void)

{ que* list= first ; // вспомогательный указатель устанавливается на

// начало очереди

que * uk ; // вспомогательный указатель для продвижения по

//очереди

while(list!=NULL) { uk = list ; list=list->next }//продвижение по очереди

if( uk!=NULL) {uk->next=this; }//присоединение в конец очереди

else first = this; // очередь пустая

this->next=NULL; }

Void que::print (void)

{ que *list = first ; // устанавливаем на начало очереди

if ( list = = NULL) {cout << “ список пуст”; return; }

else cout<<”содержимое списка :”

while( list!=NULL)

{ cout<< list->bukva; list= list->next; }//выводим и продвигаемся по

// очереди

}

que * que :: first = NULL; //инициализация статического компонента

Void main( )

{ //формируем объекты класса

que A( ‘a’) ; que B(’b’ ) ; que C(‘c’); que D(‘d’);

que::print( ); // выводим фразу, что список пуст

A.add( ); B.add( ); C.add( ); D.add( );//включаем в список

// элементы

que::print( ); } //выводим список

Перегрузка функций

С++ позволяет определить в программе произвольное количество функций с одним именем, при условии что все они имеют разный состав параметров , или сигнатуру.

Void f ( int );

Void f (int, int);

Void f ( char* );

При вызове перегруженной функции компилятор анализирует ее сигнатуру и выбирает из списка одноименных функций ту функцию, сигнатура которой соответствует вызываемой.

При этом возвращаемый функцией тип значения не имеет

Void f ( int)

int F (int)

не являются перегруженными, компилятор их не различает.

Для того чтобы различать одноименные функции компилятор использует кодирование имен функций (уточненные имена). Функциям даются имена, в которые входят имя класса, если эта функция компонентная, имя функции и список параметров.

class MyClass { …

void Func ( int ); @MyClass@Func$qi

void Func (int, int); @MyClass@Func$qii

void Func ( char* ); @ MyClass@Func$qpzc

… };

Как правило, для глобальных функций используется перегрузка, когда данные и код для их обработки различны, но при этом удобно, чтобы функции назывались одинаково.

Если различаются только типы данных, то удобнее использовать шаблон.

Перегрузка глобальных функций:

#include<iostream.h>

void Print ( int i) { cout<<”\n int = ” <<i; }

void Print ( int * pi ) { cout<<”\n pointer = ” <<pi<< “, значение =”<<*pi; }

void Print ( char*s) { cout<<”\n string = ” <<s; }