Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ООП 2012.doc
Скачиваний:
31
Добавлен:
24.09.2019
Размер:
301 Кб
Скачать
☆

Void Print(tPoint r) {…}

Формат:

<Имя конструктора>(const <Имя класса> &<Имя объекта>){…}

Обязательно используется, при наличии в классе динамических полей,

Тогда описывается он так

TNum(const TNum &Obj)

{ pn=new int(*Obj.pn);}

37) Дружественные функции, методы и классы.

Такое ограничение на доступ к внутренним и защищенным компонентам класса может оказаться неоправданно строгим. Оно может существенно сужать возможности наследования других классов от данного и сокращать количество вариантов его использования. Бывают случаи, когда не компонентные функции должны иметь возможность обращаться к внутренним компонентам класса. В такой ситуации класс может предоставить особые привилегии определенным внешним

функциям или компонентным функциям другого класса. Эти функции получили название дружественных. По определению, дружественной функцией класса называется функция, которая, не являясь компонентом некоторого класса, имеет доступ ко всем его компонентам. Функция не может стать другом класса «без его согласия». Для получения прав друга функция должна быть описана в теле класса со спецификатором friend. Именно при наличии такого описания класс

предоставляет функции права доступа к защищенным и внутренним компонентам.

Друзьями класса могут являться и компонентные функции другого класса.

Однако следует заметить, что такую привилегию методу другого класса может предоставить лишь автор данного класса, а не автор метода. Если необходимо, чтобы все функции некоторого класса имели доступ к внутренним полям другого класса, то весь класс может быть объявлен дружественным: friend class <имя класса >.

38) Переопределение операций.

Типы функций-операций:

1. Независимая функция-операция

а) <Тип результата> operator@(<Операнд>)

б) <Тип результата> operator@(<Операнд1>,<Операнд2>)

2. Компонентная функция-операция

а) <Тип результата> operator@( ) // Операнд = Объект

б) <Тип результата > operator@(<Операнд2>) // Операнд1 = Объект

Формы вызова

а) стандартная б) операторная

operator@(<Арг>) @<Арг>

operator@(<Арг1>,<Арг2>) <Арг1>@<Арг2>

<Арг>. operator@( ) @<Арг>

<Арг1>. operator@(<Арг2>) <Арг1>@<Арг2>

1. Можно переопределять только операции, параметры которых –объекты.

2. Не разрешается переопределение *, sizeof, ? :, #, ##, ::, Class::.

3. Операции =, [ ], ( ) можно переопределять только в составе класса

4. При переопределении операций нельзя изменить ее приоритет и ассоциативность.

39) Шаблоны классов.

Параметризованный класс ( шаблон) представляет собой определение класса, в котором часть используемых типов компонент класса определяется через параметры. Таким образом, каждый шаблон определяет группу классов, которые, несмотря на различие типов, характеризуются одинаковым поведением. Переопределить тип в процессе выполнения программы нельзя: все операции конкретизации типа выполняются компилятором (точнее - препроцессором) C++.

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

Формат описания шаблона класса:

template <Список параметров><Описание класса>

Формат объявления объектов:

<Имя класса> <Список аргументов>

<Имя объекта>(<Параметры конструктора>)

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]