- Первый параметр оператора опускается, им становится экземпляр класса (this).
- Его можно сделать константным методом.
- У него имеется доступ к не-public членам.
- Оператор можно сделать виртуальным.
пятница, 29 октября 2010 г.
30. Перечислите особенности перегрузки операций как методов класса. Чем отличается перегрузка внешним образом от перегрузки как метода класса?
среда, 27 октября 2010 г.
29. Можно ли определить новую операцию?
Нельзя. Технически это было бы несложно, но создало бы больше проблем, чем решило. Допустим, мы решили добавить операцию **, означающую в некоторых языках возведение в степень. Посмотрим, какие возникают трудности.
- Неоднозначность. Как интерпретировать a**b? (a)**(b) или a*(*b). Заметьте, оба варианта синтаксически корректны, но имеют разный смысл. Придется создавать правила для разрешения этой ситуации.
- Ассоциативность. Чему эквивалентно a**b**c? (a**b)**c или a**(b**c)?
- Приоритет. Чему эквивалентно a+b**c? (a+b)**c или a+(b**c)?
вторник, 26 октября 2010 г.
28. Можно ли при перегрузке изменить приоритет операции?
К счастью, нет :) Это создало бы слишком много проблем.
понедельник, 25 октября 2010 г.
27. Можно ли перегружать операции для встроенных типов данных?
Нет. Вообще, хотя бы одно из значений оператора должно являться пользовательским типом.
воскресенье, 24 октября 2010 г.
26. Какие операции нельзя перегружать? Как вы думаете, почему?
По-моему, чаще используется слово "оператор", я так и буду их называть.
Перегружать можно следующие операторы:
А нельзя (подсмотрел у Страуструпа):
Также нельзя определить новые лексемы.
Перегружать можно следующие операторы:
+ - * / % ^ & | ~ ! = < >
+= -= *= /= %= ^= &= |=
<< >> >>= <<= == != <= >=
&& || ++ -- ->* , -> [] ()
new new[] delete delete[]А нельзя (подсмотрел у Страуструпа):
::(разрешение области видимости).(выбор члена).*(выбор члена через указатель на член)?:тернарный операторsizeof, typeid
Также нельзя определить новые лексемы.
суббота, 23 октября 2010 г.
Размер объекта (класса). Что на него влияет.
Раз уж начались вопросы о размере объекта, то перечислим все факторы, влияющие на размер.
- Нестатические члены
- Выравнивание
- Наличие виртуальных методов (+размер указателя на таблицу виртуальных методов)
- Количество виртуально пронаследованных классов в иерархии наследования (+размер указателя на таблицу виртуальных методов каждого такого класса)
25. Одинаков ли размер класса и аналогичной структуры?
Да. У структуры всего одно отличие: доступ к членам по умолчанию открыт (public)
см. также:
6. Является ли структура классом? Чем класс отличается от структуры?
10. Для чего используются ключевые слова public и private?
см. также:
6. Является ли структура классом? Чем класс отличается от структуры?
10. Для чего используются ключевые слова public и private?
пятница, 22 октября 2010 г.
24. Влияют ли методы на размер объекта?
Нет. Метод класса един для всех объектов класса, и разумеется, не создается каждый раз при создании объекта.
см. также:
14. Что такое метод? Как вызывается метод?
см. также:
14. Что такое метод? Как вызывается метод?
четверг, 21 октября 2010 г.
23. Каков размер «пустого» объекта?
class A{
}В теории не меньше одного байта. На практике ровно один байт. Не ноль потому, что, согласно спецификации, каждый объект должен иметь свой адрес. Объекты с нулевым размером запросто могли иметь один и тот же адрес.
среда, 20 октября 2010 г.
Подписаться на:
Сообщения (Atom)