Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
шпоры ппвис 2 часть с++.doc
Скачиваний:
26
Добавлен:
01.03.2016
Размер:
265.22 Кб
Скачать

24. Пример использования функции-друга.

#include <string.h>

#include <stdio.h>

#include <iostream.h>

//класс неарифметического типа

class COffice

{

private:

char m_namedok[30];

int m_date[3];

int m_kode;

public: COffice(); COffice(char*name, int*date, int);

COffice ( const COffice&); friend ostream& operator<< (ostream& str, COffice p friend void TO_SHOW( COffice obj);

};

void TO_SHOW (COffice obj)

{

cout<<'\n'<<obj.m_namedok<< \n'<<obj.m_date[0]<<'.'<<obj.m_date[1]<<'.'<<obj.m_date[2]<<'\n'<<obj.m_kode<< endl;

}

ostream& operator<< (ostream& str, COffice p)

{

return (str<<p.getNamedok()<<'\n' << p.getDate()<< '\n'<<p.getKode()<< '\n'<< endl);

}

main ()

{

COffice x1(…)

TO_SHOW(x1);

cout<<x1;}

25. Перегрузка операторов. Назначение, правила, способы.

Придание стандартному оператору новой семантики (смысла).

Перегрузка операторов предоставляет возможность переопределить практически любой стандартный оператор С++ относительно типа данных class (класс). Запрещается перегружать (. , .* , :: , sizeof, #)

Когда оператор перегружается, его стандартное предназначение для типов данных, отличных от типа class, сохраняется. в тоже время оператор приобретает дополнительный смысл, связанный с тем классом, для которого он определен. Перегрузка операторов расширяет набор типов для которых он может применяться.

Правила:

- нельзя создавать новый знак оператора, можно использовать лишь существующие.

- невозможно изменить приоритет

- нельзя изменить количество операндов в операторе.

- оператор присваивания «=», не наследуется, перегружается только при помощи методов класса.

Перегружать операторы можно при операторных функций, функциями-членами и членами-друзьями.

Объявление:

Через метод!!

Для унарных:

тип_функции имя_класса :: operator знак_оператора ()

{}

Для бинарных:

тип_функции имя_класса :: operator знак_оператора (описание_параметра)

{}

Через функцию- друг!!!!

тип_функции имя_класса :: operator знак_оператора (описание_параметра)

{}

Для бинарных:

тип_функции имя_класса :: operator знак_оператора (параметра_1, параметр_2)

{}

26. Перегрузка операторов с использованием операторных-функций. Указатель this.

Для унарных:

тип_функции имя_класса :: operator знак_оператора ()

{}

Для бинарных:

тип_функции имя_класса :: operator знак_оператора (описание_параметра)

{}

thisуказатель, представляет собой неявно определенный указатель на сам объект и является скрытой внутренней переменной класса. this – это адрес активного объекта в оперативной памяти. *this – сам активный объект.

Абсолютно каждый объект имеет свой собственный указатель this. Этот указатель нужно объявлять в классе, он объявлен неявно. Указатель изменить нельзя. При работе с другом указатель this не передается.

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

тип_функции имя_класса :: operator знак_оператора (описание_параметра)

{}

Для бинарных:

тип_функции имя_класса :: operator знак_оператора (параметра_1, параметр_2)

{}

С помощью функции-друг можно перегрузит любые сочетания операторов (кроме = и [ ] ). при работе с другом указатель this не передается.