русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Дружественные функции и перегрузка операций.


Дата добавления: 2015-07-09; просмотров: 3104; Нарушение авторских прав


Дружественные функции – функции, не являющиеся членами класса, но имеющие доступ к закрытым членам этих классов, более того, одна такая функция может иметь доступ к закрытым членам нескольких классов. Для объявления дружественной некоторому классу функцию в определение этого класса включают её прототип, перед которым ставится ключевое слово friend. Дружественная функция не является членом класса, в котором она объявлена. Поэтому, вызывая дружественную функцию, не нужно указывать имя объекта или указатель на объект и операцию доступа к члену класса (точку или стрелку). Доступ к закрытым членам класса дружественная функция получает только через объект класса, который, в силу этого, должен быть либо объявлен внутри функции, либо передан ей в качестве аргумента. Дружественная функция не наследуется, то есть она не является таковой для производных классов. С другой стороны, функция может быть дружественной сразу нескольким классам.

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

Перегруженные операторы реализуются как функции с помощью ключевого слова operator. Обозначения собственных операций вводить нельзя. Можно перегружать любые операции, существующие в C++, за исключением:

Таблица 9 — Операции, не подлежащие перегрузке

Оператор Название
. Выбор члена
.* Выбор члена по указателю
:: Оператор расширения области видимости
? : Оператор условия
# Препроцессорный символ
## Препроцессорный символ

 

 

Операторные функции перегруженных операторов, за исключением new и delete, должны подчиняться следующим правилам:



- операторная функция не может быть переопределена для стандартных типов данных;

- операторная функция должна быть либо нестатической функцией-членом класса, либо принимать аргумент типа класса, или аргумент, который является ссылкой на тип класса;

- операторная функция не может изменять число аргументов или приоритеты операций и их порядок выполнения по сравнению с использованием соответствующего оператора для встроенных типов данных;

- операторная функция унарного оператора, объявленная как функция-член, не должна иметь параметров; если же она объявлена как глобальная функция, она должна иметь один параметр;

- операторная функция бинарного оператора, объявленная как функция-член, должна иметь один параметр; если же она объявлена как глобальная функция, она должна иметь два параметра:

- операторная функция не может иметь параметров по умолчанию;

- первый параметр (если он есть) операторной функции, объявленной как функция-член, должен иметь тип класса объекта, для которого вызывается соответствующий оператор: никакие преобразования типа для первого аргумента не выполняются;

- за исключением оператора присваивания, все операторные функции класса наследуются его потомками;

- операторные функции =, (), [] и -> должны быть нестатическими функциями-членами (и не могут быть глобальными функциями).

Унарная функция-операция, определяемая внутри класса, должна быть представлена с помощью нестатического метода без параметров, при этом неявным операндом является вызвавший ее объект, который передается ей через указатель *this.

Операции постфиксного инкремента и декремента должны иметь первый параметр типа int.

Бинарная функция-операция, определяемая внутри класса, должна быть пред­ставлена с помощью нестатического метода с одним параметром, при этом вызвавший ее объект передается в функцию в качестве неявного параметра с помощью указателя *this.

Операция присваивания определена в любом классе по умолчанию как поэлементное копирование. Эта операция вызывается каждый раз, когда одному существующему объекту присваивается значение другого. Если класс содержит поля, память под которые выделяется динамически, необходимо определить собственную операцию присваивания. Чтобы сохранить семантику присваивания, операция-функция должна возвращать ссылку на объект, для которого она вызвана, и принимать в качестве параметра единственный аргумент — ссылку на присваиваемый объект.

 



<== предыдущая лекция | следующая лекция ==>
Конструкторы и инициализация. Конструктор без параметров (по умолчанию). Конструктор копирования. | Преобразование типов, определяемых пользователем с помощью конструкторов и операций преобразования.


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.293 сек.