Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Для новичков > Проблема с перегрузкой оператора = |
Автор: Antarn 7.12.2008, 18:52 | ||||||||
Здравствуйте. Объясните, в чем ошибка перегрузки оператора = с параметром char ?
Первый перегруженный оператор для
успешно вызывается. На
Выдает ошибку
В чем проблема ? |
Автор: Annihilator 7.12.2008, 20:02 |
С чего ты взял, что вызывается именно перегруженный оператор? Это вызывается оператор присваивания по умолчанию, который создают побитовые копии объектов (не веришь - пройдись дебаггером). А проблема вся в том что ты перегрузил операторы для класса A, а пытаешься их использовать для класса B |
Автор: J0ker 7.12.2008, 20:02 | ||
операторы, конструкторы и деструкторы не наследуются в первом случае вызывается оператор предка и дефолтный shallow-copy operator= и надо писать так:
Добавлено @ 20:06 побитовые копии только для PODS для классов вызывается operator= для предка и каждого мембера класса |
Автор: Antarn 7.12.2008, 20:36 | ||||
Добавил в перегрузку cout и смотрел в консоль ![]()
По аналогии подумал что также вызовется оператор предка (для первого же вызвал). Спасибо за ответы ![]() |
Автор: J0ker 7.12.2008, 23:05 | ||||||
|
Автор: Antarn 7.12.2008, 23:05 | ||
Вопрос вдогонку - как вызвать оператор перезагрузки класса А из метода перезагрузки класса B ? Я сделал так:
Но правильно ли это ? Не может ли наследник класса А вызывать его как-то по-другому ? |
Автор: J0ker 8.12.2008, 03:14 |
ну все прально |
Автор: Kallikanzarid 8.12.2008, 08:54 | ||
Antarn, можно проще:
|
Автор: UnrealMan 8.12.2008, 12:56 |
Страуструп не прав ![]() |
Автор: J0ker 8.12.2008, 17:54 | ||
так-же как конструкторы и деструкторы ![]() иначе мне твоя мысль не ясна Добавлено через 8 минут и 27 секунд о, вот тут упс операторы присваивания имелось ввиду |
Автор: UnrealMan 8.12.2008, 23:07 | ||||||
Если моя мысль тебе до сих пор не ясна, попробуй, руководствуясь стандартом, выяснить, является ли класс D в примере ниже
1) полиморфным 2) абстрактным. |
Автор: J0ker 9.12.2008, 03:15 |
да да потерто потерто потерто все понял спасибо ![]() полностью с тобой согласен был не прав ЗЫЖ то, что потер - не въехал, что implicit оператор присваивания скрывает все остальные - отсюда и кажущаяся разность поведения ![]() |
Автор: J0ker 9.12.2008, 03:45 | ||||||||||||
в связи с поправкой UnrealMan'a ![]() operator= наследуется, но при отсутствии operator= в классе наследника существует implicit operator=, который и скрывает унаследованный пример:
|