|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Вызвать перегруженный оператор присваивания суперкласса. |
|
C/C++ - Вызвать перегруженный оператор присваивания суперкласса.
|
Старожил Сообщения: 192 |
Профиль | Отправить PM | Цитировать
Есть вопрос касающийся кода, который (почти) целиком лежит там.
Как видно, существует класс Becher и подкласс BecherMitAufdruck. В суперклассе я создал перегруженный оператор присваивания. Becher& Becher::operator=(const Becher &b) { if (this != &b) { delete [] inhalt; inhalt = strdupnew(b.inhalt); fassungsvermoegen = b.fassungsvermoegen; fuellgrad = b.fuellgrad; } return *this; } BecherMitAufdruck& BecherMitAufdruck::operator=(const BecherMitAufdruck &b) { if (this != &b) { delete [] inhalt; delete [] aufdruck; inhalt = strdupnew(b.inhalt); aufdruck = strdupnew(b.aufdruck); fassungsvermoegen = b.fassungsvermoegen; fuellgrad = b.fuellgrad; } return *this; } но это не работает. Понятно, что следует как-то определенить пространство имен, например но как это вызвать для объекта *this мне непонятно. |
|
Отправлено: 22:12, 08-02-2012 |
Старожил Сообщения: 198
|
Профиль | Отправить PM | Цитировать Думаю, нормальным решением будет следующее.
Поясню на примере класса Becher. Создаются вспомогательные методы void Becher::_copy(const Becher &b) { inhalt = strdupnew(b.inhalt); fassungsvermoegen = b.fassungsvermoegen; fuellgrad = b.fuellgrad; } void Becher::_destroy() { delete [] inhalt; } Becher& Becher::operator=(const Becher &b) { if (this != &b) { _destroy(); _copy(b); } return *this; } Becher::~Becher() { _destroy(); } Becher::Becher(const Becher &b) { _copy(b); } void BecherMitAufdruck::_copy(const BecherMitAufdruck &b) { Becher::_copy(b); aufdruck = strdupnew(b.aufdruck); } BecherMitAufdruck& BecherMitAufdruck::operator=(const BecherMitAufdruck &b) { if (this != &b) { _destroy(); _copy(b); } return *this; } Надеюсь, мысль ясна. |
Последний раз редактировалось PhilB, 10-02-2012 в 23:41. Отправлено: 20:36, 10-02-2012 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
ИО Капитана Очевидности Сообщения: 5387
|
Профиль | Отправить PM | Цитировать Цитата Smasher:
И вызывается соответствующий метод соответствующего базового класса для объекта this Также можно вызывать все остальные операторы базовых классов |
|
------- Отправлено: 04:01, 14-02-2012 | #3 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Как оператор округляет проценты | united | Мобильные ОС, смартфоны и планшеты | 11 | 18-02-2008 13:19 | |
[решено] Javascript - Оператор === | hasherfrog | Вебмастеру | 5 | 25-07-2007 14:05 | |
оператор If... Else | Pandora | Вебмастеру | 9 | 29-07-2005 08:43 | |
GPRS + Оператор | kiro | Мобильные ОС, смартфоны и планшеты | 3 | 21-03-2004 21:19 | |
Delphi - Оператор доступа в Delphi | LedWorm | Программирование и базы данных | 6 | 29-02-2004 20:46 |
|