![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
Antarn |
|
||||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 103 Регистрация: 11.8.2006 Репутация: нет Всего: нет |
Здравствуйте.
Объясните, в чем ошибка перегрузки оператора = с параметром char ?
Первый перегруженный оператор для
успешно вызывается. На
Выдает ошибку
В чем проблема ? |
||||||||
|
|||||||||
Annihilator |
|
|||
![]() bytegrinder ![]() ![]() Профиль Группа: Участник Сообщений: 493 Регистрация: 21.11.2006 Где: Омск Репутация: 1 Всего: 3 |
С чего ты взял, что вызывается именно перегруженный оператор? Это вызывается оператор присваивания по умолчанию, который создают побитовые копии объектов (не веришь - пройдись дебаггером). А проблема вся в том что ты перегрузил операторы для класса A, а пытаешься их использовать для класса B Это сообщение отредактировал(а) Annihilator - 7.12.2008, 20:03 -------------------- Если вы не можете сделать хоpошyю пpогpаммy, сделайте, чтобы она по кpайней меpе выглядела хоpошо |
|||
|
||||
J0ker |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 9 Всего: 14 |
операторы, конструкторы и деструкторы не наследуются
в первом случае вызывается оператор предка и дефолтный shallow-copy operator= и надо писать так:
Добавлено @ 20:06 побитовые копии только для PODS для классов вызывается operator= для предка и каждого мембера класса Это сообщение отредактировал(а) J0ker - 7.12.2008, 20:27 |
|||
|
||||
Antarn |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 103 Регистрация: 11.8.2006 Репутация: нет Всего: нет |
Добавил в перегрузку cout и смотрел в консоль ![]()
По аналогии подумал что также вызовется оператор предка (для первого же вызвал). Спасибо за ответы ![]() |
||||
|
|||||
Annihilator |
|
|||
![]() bytegrinder ![]() ![]() Профиль Группа: Участник Сообщений: 493 Регистрация: 21.11.2006 Где: Омск Репутация: 1 Всего: 3 |
А можно, пожалуйста, кодом проиллюстрировать. Пока не очень въехал (различия POD и не-POD знаю) -------------------- Если вы не можете сделать хоpошyю пpогpаммy, сделайте, чтобы она по кpайней меpе выглядела хоpошо |
|||
|
||||
J0ker |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 9 Всего: 14 |
Это сообщение отредактировал(а) J0ker - 7.12.2008, 23:05 |
|||
|
||||
Antarn |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 103 Регистрация: 11.8.2006 Репутация: нет Всего: нет |
Вопрос вдогонку - как вызвать оператор перезагрузки класса А из метода перезагрузки класса B ?
Я сделал так:
Но правильно ли это ? Не может ли наследник класса А вызывать его как-то по-другому ? |
|||
|
||||
J0ker |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 9 Всего: 14 |
||||
|
||||
Kallikanzarid |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 240 Регистрация: 9.11.2008 Репутация: 2 Всего: 3 |
Antarn, можно проще:
|
|||
|
||||
UnrealMan |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 722 Регистрация: 30.3.2006 Репутация: 5 Всего: 32 |
||||
|
||||
J0ker |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 9 Всего: 14 |
так-же как конструкторы и деструкторы ![]() иначе мне твоя мысль не ясна Добавлено через 8 минут и 27 секунд о, вот тут упс операторы присваивания имелось ввиду |
|||
|
||||
UnrealMan |
|
||||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 722 Регистрация: 30.3.2006 Репутация: 5 Всего: 32 |
Если моя мысль тебе до сих пор не ясна, попробуй, руководствуясь стандартом, выяснить, является ли класс D в примере ниже
1) полиморфным 2) абстрактным. |
||||||
|
|||||||
J0ker |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 9 Всего: 14 |
да да потерто потерто потерто все понял спасибо ![]() полностью с тобой согласен был не прав ЗЫЖ то, что потер - не въехал, что implicit оператор присваивания скрывает все остальные - отсюда и кажущаяся разность поведения ![]() Это сообщение отредактировал(а) J0ker - 9.12.2008, 03:22 |
|||
|
||||
J0ker |
|
||||||||||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 9 Всего: 14 |
в связи с поправкой UnrealMan'a ![]() operator= наследуется, но при отсутствии operator= в классе наследника существует implicit operator=, который и скрывает унаследованный пример:
Это сообщение отредактировал(а) J0ker - 9.12.2008, 03:46 |
||||||||||||
|
|||||||||||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |