Re: Странное поведение с перегрузкой оператора =
От: prVovik Россия  
Дата: 30.04.04 22:17
Оценка:
Здравствуйте, AlexTAI, Вы писали:

ATA>Почему следующий код

ATA>[ccode]
...
ATA>скомпилированный g++ выдает
ATA>

ATA>BBBBBBBB
ATA>CCCCCCC
ATA>DDDDDD


ATA>Есть идеи почему???

ATA>Почему компайлер ставит оба вызова (порядок мало интересен — он понятен)? Вроде должен быть или один или ошибка компиляции.

ATA>(Если кто то знает по какому правилу стандарта оно себя так ведет — был бы рад узнать номер правила)

Хм... А как это может по-другому работать, просто у меня даже идей на этот счет нет?
Ну смотри, ты один объект класса D присваиваешь другому объекту того же класса. Соответствующего оператора копирования в D нет, потому используется оператор копирования по умолчанию. Это означает, что будут просто вызваны операторы копирования для всех членов класса. В результате, мы видим на экране строки:BBBBBBBB и CCCCCCC. Полет идет нормально. Далее, ты присваиваешь объекту класса D объект класса C, но на этот раз в классе D есть подходящий оператор копирования, он и вызывается. Результат — строка DDDDDD. В чем проблема?
лэт ми спик фром май харт
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.