Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Перегрузка операций. Пример




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

..*?::: # ## sizeof

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

а)при перегрузке операций сохраняются количество аргументов, приоритеты операций и правила ассоциации (справа налево и слева направо), используемые в стандартных типах данных

б)для стандартных типов данных переопределять операции нельзя

в)функции-операции не могут иметь аргументов по умолчанию

г)функции-операции наследуются(за исключением =)

д)функции-операции не могут определяться как static

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

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

class monstr{

...

bool operator > (const monstr &M){

if(health>M.health) return true;

return false;

}

};

Роль ссылок в борьбе за эффективность. Пример.

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

Но даже если вам это не нужно, для большого класса или структуры передача по ссылке гораздо быстрее и экономит память.

 

void f(Monster x);

void g(const Monster& x);

...

Monster barmaley;

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

g(barmaley); // Функция получит адрес barmaley. Kопию создавать не надо.

 

По этой причине параметры длинее 8 байтов почти всегда передаются по ссылке.Ссылки полезны и в циклах по элементам массива.

for (int i = 0; i < 10; i ++)

{

double& x = a[i];

if (x > 1)

x = 1;

if (x < 0)

x = 0;

x = x * x;

}

Во всех этих случаях можно было бы использовать указатель, и в Си так и делается, но, как сказано выше, указатели опасны. К тому же писать звёздочки и амперсанды - утомительно.Но по-настоящему необходимы ссылки для перегрузки операторов, о которой пойдёт речь в следующих разделах. Так, например, что ++ обычно понимается как изменяющая свой аргумент, потому::operator++(T) обычно обязана иметь ссылку в параметре - т.е.::operator++(T&)

Точно так же operator[] обычно понимается как возвращающая lvalue, что требует T& Arr::operator[](int index);

 

Инициализация объектов. Варианты конструкторов. Пример

Объекты инициализируются с помощью конструктора. Конструктор вызывается при создании и инициализации объекта данного типа; деструктор — при уничтожении. Существуют два типа конструкторов -конструктор копирования и конструктор преобразования.

Пример:

Array::Array(const Array&)

 





Поделиться с друзьями:


Дата добавления: 2015-10-01; Мы поможем в написании ваших работ!; просмотров: 439 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Наглость – это ругаться с преподавателем по поводу четверки, хотя перед экзаменом уверен, что не знаешь даже на два. © Неизвестно
==> читать все изречения...

2675 - | 2239 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.008 с.