Язык С++ и программирование на нем. Рейзлин В.И. - 125 стр.

UptoLike

Составители: 

127
Для выражения
X xvar = X (“12“, “-25“);
компилятор выдаст сообщение об ошибке «не найден конструктор с
указанными аргументами». Дело в том, что в отличие от конструктора,
оператор-функция преобразования типа не может создать объект абст-
рактного типа. Она способна только выполнить преобразование значе-
ния уже созданного объекта одного типа к значению другого типа. В
последнем же примере объект типа Y еще не существует.
22. Некоторые особенности переопределенных
операций
Ограничениями при переопределении операций =, [], (), -> яв-
ляется то, что реализующие их функции operator=() и т.д. обязательно
должны являться членами класса и не могут быть статическими функ-
циями. Если говорить о механизме наследования, то обычно производ-
ный класс наследует все свойства класса базового. Из этого правила
есть два исключения.
1) Производный класс не может наследовать конструкторы сво-
его базового класса.
2) Операция присваивания, переопределенная для базового клас-
са, не считается переопределенной для его производных классов.
Все остальные операции наследуются обычным образом, то есть,
если для производного класса нужная операция не переопределена, но
она переопределена в его базовом классе, то будет вызвана операция ба-
зового класса.
22.1. Операция =
Операция присваивания = является предопределенной для любо-
го абстрактного типа данных.
При этом такая предопределенная операция присваивания интер-
претируется не как получение побитовой копии объекта, а как последо-
вательное выполнение операции присваивания над его членами (как
стандартных так и абстрактных типов). Побитовое копирование проис-
ходит только тогда, когда операция = не определена. Предопределен-
ную операцию = можно переопределить.