- •Указатель this
- •Void print ( void) void print ( void)
- •Void main ()
- •Void f ( char* );
- •Void f ( int)
- •Void que::add(void)
- •Void que::print (void)
- •Void main( )
- •Перегрузка функций
- •Void f ( int );
- •Void f (int, int);
- •Void main ()
- •Void main ( )
- •Перегрузка конструкторов
- •Перегрузка стандартных операций
- •Void main ( )
- •Void main ( )
- •Void vivod ( ) // выводит данные
- •Void main ( )
- •Void display( )
- •Void main ( )
- •Перегрузка операции присваивания
- •Объект1
- •Int GetX ( ) { return X; }
- •Void main ()
- •Блокировка копирования и присваивания:
- •Преобразование типов в классах пользователя
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; }
