| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > operator int() и operator=(int) |
| Автор: MAKCim 31.5.2006, 22:31 | ||
возник такой вопрос
|
| Автор: Xenon 31.5.2006, 22:33 |
| MAKCim Вроде как обязательно необходима перегрузка и без вариантов. |
| Автор: DeadSoul 31.5.2006, 23:05 |
Пункт стандарта? |
| Автор: bel_nikita 31.5.2006, 23:10 | ||
Думаю нужно начинать - какой компилятор? |
| Автор: Xenon 31.5.2006, 23:12 |
| Эм ... это изрекла наша училка по инфе Ну хотя теоретически ... При встрече оператора "=" компилятор ищет перегрузку для него сначала? |
| Автор: BreakPointMAN 31.5.2006, 23:15 | ||||
Чтобы выполнить строку
в классе A должен быть либо определен конструктор с параметром типа int, либо оператор присваивания с параметром типа int.
это вообще немного из другой оперы... это оператор преобразования... там, где будет встречаться объект класса A (в нашем примере a), а подразумеваться использование объекта типа int, то реально будет использоваться значение целочисленного члена класса A по имени a |
| Автор: BreakPointMAN 31.5.2006, 23:30 | ||
а ссылку там нельзя... надо так:
|
| Автор: MAKCim 1.6.2006, 09:26 | ||||||
ну не надо все отлично работает (GNU gcc 4.0.2) если убрать a=6
это понятно вот я и думаю в моем случае встречается объект класса A, а подразумевается переменная типа int не вижу логики в этой ошибке. По идее если есть необходимый operator= его нужно использовать, в остальных случаях использовть то что есть Добавлено @ 09:26
И? |
| Автор: sergejzr 1.6.2006, 09:37 |
| MSVisual C++6 Всё компилируется и работает. |
| Автор: likehood 1.6.2006, 09:52 |
Если ты про первый пост, то в VC7.1 не компилится. |
| Автор: ZeusAtVingrad 1.6.2006, 09:58 | ||||
А конструктор зачем? |
| Автор: BreakPointMAN 1.6.2006, 09:58 |
| гм... ну... возможно... хотя я на практике не встречал такого. Добавлено @ 10:03 Если будет определен конструктор с параметром типа int и не будет определено оператора присваивания с параметром типа int, то сначала будет создан безымянный объекта класса A, а затем будет выполнено присваивание. |
| Автор: MAKCim 1.6.2006, 10:31 | ||||
это?
если да то, то у меня ошибка компиляции |
| Автор: BreakPointMAN 1.6.2006, 10:57 | ||
|
| Автор: ZeusAtVingrad 1.6.2006, 12:00 | ||||
Так объект-то уже создан. И потом, если у него всё-таки не будет оператора присваивания, то как будет "выполнено присваивание"? Конструктор с параметром - это копирующий конструктор для конструкций (пардон за тавалогию) вроде этой:
|
| Автор: BreakPointMAN 1.6.2006, 12:06 | ||
Будет использован оператор присваивания, созданный компилятором по умолчанию, выполняющий почленное копирование. |
| Автор: ZeusAtVingrad 1.6.2006, 13:39 |
| А что, бывает такое? |
| Автор: MAKCim 1.6.2006, 14:27 | ||
да, и очень часто если у тебя в классе нет специфической работы с указателями, ссылками, а есть только экземпляры классов или встроенных типов копирующий конструктор и оператор присваивания можно (и даже нужно) не определять |
| Автор: ZeusAtVingrad 1.6.2006, 14:55 |
| Т.е. если у меня в классе объявлен указатель на что-либо, то копилятор возьмёт на себя смелость скопировать в него значение такого же указателя из другого объекта этого класса? |
| Автор: likehood 1.6.2006, 15:09 |
| Именно! |