Лекции.Орг


Поиск:




Категории:

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

 

 

 

 


Возможна ли перегрузка операций для данных стандартных типов?

Вопросы к защите лабораторных по ООП №3 и №4

Магнитная буря

  1. Какие оператор-функции по умолчанию включаются в спецификацию класса, если они явно не определены?

 

class:: operator = ();

 

Паша из 12й сказал, что еще оператор new и delete… Но этим можно козырнуть только в самом крайнем случае.

Еще явный представитель перегруженного оператора это << и >> в cout и cin но оно и без класса может быть)

 

 

  1. Какой тип аргумента и кода возврата должен иметь оператор присваивания, создаваемый по умолчанию?

 

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

 

 

  1. Сколько аргументов должна иметь компонентная оператор-функция, перегружающая унарную операцию?

 

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

 

 

  1. Сколько аргументов должна иметь компонентная оператор-функция, перегружающая бинарную операцию?

 

Только один.

То есть например operator + (class), где class это тот объект который будет находиться справа от оператора, объект слева генерирует вызов оператора.

 

  1. Сколько аргументов должна иметь дружественная оператор-функция, перегружающая унарную операцию?

 

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

 

 

  1. Какие операторы языка С не могут быть перегружены в классах объектов С++?

 

# (препроцессорный оператор);

. (выбор члена структуры);

:? (условный оператор);

sizeof().

 

7. Как интерпретируется последовательность присваиваний: w = x = y = z;

 

W=(x=(y=z))

 

 

  1. Какие операции языка С++ не могут быть перегружены в классах объектов?

 

:: (разрешение области видимости);

.* (выбор члена класса через указатель на классовые члены);

typeid() (обеспечивает динамическую идентификацию типов).

 

 

  1. Что является аргументом return в коде оператора присваивания?

 

Указатель на этот же объект, то есть this.

 

 

  1. Сколько аргументов должна иметь дружественная оператор-функция, перегружающая бинарную операцию?

 

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

Каким образом можно запретить присваивание объектов класса во внешних функциях?

 

Необходимо так объявить функцию оператор:

Class aa

{

private:

void operator = (const& аа);

};

 

  1. Можно ли перегрузить операцию ** для возведения в степень объектов класса?

 

Нельзя, так как такая перегрузка легко приводит к неоднозначности, то есть операция ** левоассоциативна или правоассоциативна, как должно быть интерпретировано выражение х**у, как х*(*у) или (х)**(у), Страуструп сказал, что лучше использовать, если есть возможность встроенные функции, то есть pow() вместо перегруженной **, хотя такие ограничения и весьма драконовские).

 

Возможна ли перегрузка операций для данных стандартных типов?

 

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

 

  1. В каких случаях нельзя реализовать перегрузку операций и перегрузку оператора в форме компонентной функции класса?

Когда например, необходимо создать перегрузку оператора для класса и встроенного типа в любом порядке, т.е. class1=class+4 и class1=4+class. Или например чтобы можно было выполнять ++ справа и слева, т.е. ++class и class++

 

 

  1. Зачем нужны дружественные функции?

Дружественные функции не являются членами класса, но имеют доступ к его закрытым членам. Например, дружественная функция может быть дружественной нескольким классам => иметь доступ к их закрытым членам.

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

 

  1. В каком случае неизбежно использование оператора преобразования типов?

 

Лишь тогда, когда необходимо непосредственное преобразование объекта в какой то встроенный тип.

Пользовательские преобразования типов рассматриваются лишь тогда, когда они необходимы для разрешения неоднозначностей вызова…

 

 

  1. Возможно ли реализовать внешнюю оператор-функцию для перегрузки бинарной операции, которой передаются два указателя на объекты класса?

Именно указатели передавать нельзя. Можно передать ссылку. (Вообще должны передаваться аргументы типа класс или перечисляемые — так сказал мой компилятор)

  1. Какие аргументы и код возврата имеет оператор преобразования типа?

 

Оператор преобразования типа имеет вид operator t (), где t — имя типа, т. е. тип class приводится к типу t.

ð Аргументов никаких, а код возврата переменная типа t.

 

  1. Что обеспечивает правую ассоциативность оператора присваивания?

 

Чтобы результат присваивания мог использоваться в виде a=b=c предполагается, что оператор присваивания вернет ссылку на тот же левосторонний операнд, поэтому и появляется правая ассоциативность.

 

20. Записать в функциональной форме присваивание w = x = y = z; где w, x, y, z



<== предыдущая лекция | следующая лекция ==>
Фрагмент решения задачи 2.1 | Системы и формы оплаты труда в рыночных условиях
Поделиться с друзьями:


Дата добавления: 2016-09-03; Мы поможем в написании ваших работ!; просмотров: 915 | Нарушение авторских прав


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

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

Студенческая общага - это место, где меня научили готовить 20 блюд из макарон и 40 из доширака. А майонез - это вообще десерт. © Неизвестно
==> читать все изречения...

2346 - | 2304 -


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

Ген: 0.009 с.