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

13 Свойства и правила использования структур и объединений.

Структура –в отличии от массива , все элементы которого однатипны, СТР может содержать элементы разных типов(ключевое слова struct). Элементы СТР наз полями и могут иметь любой тип, и быть указателями на него. Доступ к полям СТР выполняется с помощью операции выбора .(точка) при обращении к полю через имя структуры и -> при обращении через указатель.

-     в С++ struct и union можно использовать так же, как класс;

-     в C++ элементы структуры или объединения по умолчанию принимаются как public;

-     для ключевого слова struct атрибут public может явно переопределяться на private или protected;

-     для ключевого слова union явное переопределение атрибута доступа невозможно;

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

-     можно описать структуру без имени struct{...} s1,s2,...;

-     объединение без имени и без списка описываемых объектов называется анонимным объединением;

-     доступ к компонентам анонимного объединения осуществляется по их имени;

-     глобальные анонимные объединения должны быть объявлены статическими;

-     анонимные объединения не могут иметь компонент-функций;

Обьедения(union) представляет собой структуру все поля которой распологаются по одному и тому же адресу. (ключ.слово union) Union можно инициализировать- значение будет объявлена 1-ой начальной компоненте.

Объеденение не может содержать битовые поля, вирт.методы, кострукторы, деструкторы, операц.присваивания.Объеденение не может входить в иерархию класса

Объед. применяют для экономии памяти в тех случаях когда известно, что больше одного поля одновременно не треб-ся

Ананимное объеденение - объеденение без имени,не имеет компонент.ф. Структуру можно объеденять без имени

14 Перегрузка операторов.

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

-    Если операнды имеют встроенный тип данных, то будет заложена стандартная операция;

-    Если операнды имеют тип данных пользователя, т.е. являются объектами класса, для которого операция была перегружена, то будет заложена перегруженная операция, запрограммированная пользователем.

-    Синтаксис определения "перегруз­ки" оператора таков: тип operator @ (список_параметров) {код, определяющий смысл указанной операции}, где @ - символ перегружаемой операции. Перегрузка операторов позволяет упростить арифметиче­ские и логические операции со сложными типами данных

Операции для конкретного класса перегружаются или методом этого класса, или функцией-другом для этого класса следующего:

Отличия перегрузки операций при помощи метода класса или функции- друга следующие:

-          @а - унарная операция может быть перегружена методом без параметров

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

-          а1 @ а2 - бинарная операция перегружается методом класса с одним параметром

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

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

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

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

-     Компилятор различает такие функции по числу и типу параметров.

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

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

-     не могут перегружаться функции, имеющие неявно совпадающие типы аргументов, например int и &int.

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

-     деструкторы не могут перегружаться. как деструктор не может иметь списка аргументов

Ниже перечислены все операторы, и встроенные функциональные вызовы которые могут быть переопределены: + - * / = < > += -= *= /= << >> <<= >>= == != <= >= ++ -- % &.