![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Wowa |
|
|||
|
Эксперт Профиль Группа: Админ Сообщений: 15017 Регистрация: 14.9.2000 Где: Винград Репутация: нет Всего: 290 |
Что такое Copy-Konstruktor?
|
|||
|
||||
| chaos |
|
|||
![]() Серийный программист ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2979 Регистрация: 7.7.2004 Где: Екатеринбург Репутация: 6 Всего: 44 |
это конструктор копирования )
Это сообщение отредактировал(а) chaos - 14.2.2005, 16:01 |
|||
|
||||
| Wowa |
|
|||
|
Эксперт Профиль Группа: Админ Сообщений: 15017 Регистрация: 14.9.2000 Где: Винград Репутация: нет Всего: 290 |
ну и для чего он нужен? |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
Copy Constructor, само имя подсказывает копирующий конструктор...
Предназначен для копирования одного обьекта в другого... A t; A o; o = t; //Вызывается copy constructor Если его не написать он генерируется автоматически, но бывают случаи когда его нужно переопределить...например ты пишешь класс для string -а вроде AnsiString. Если присвоить один обьект другому получается что char * который хранится в нем просто просвоит адрес другого обьекта, а надо скопировать данные... Надеюсь обьяснил нормально??? |
|||
|
||||
| Wowa |
|
|||
|
Эксперт Профиль Группа: Админ Сообщений: 15017 Регистрация: 14.9.2000 Где: Винград Репутация: нет Всего: 290 |
А, т.е. это создано для копирования объектов? А я думал, что это что-то имеет общего с конструктор-функцией.
|
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
Извиняюсь, небольшая ошибка..
Вот так верно...
в первом случае работает оператор присваивания... |
|||
|
||||
| Wowa |
|
|||
|
Эксперт Профиль Группа: Админ Сообщений: 15017 Регистрация: 14.9.2000 Где: Винград Репутация: нет Всего: 290 |
Т.е. в твоем коде произойдет простое копирование объекта?
А вот это сам копи-конструктор.
Получается ему в качестве параметра передаем сам объект t. А почему не &t ? Ведь в копи-конструкторе мы по идее должны принять адрес памяти, по которому располагается объект t ? Добавлено @ 16:47 Если мы ставим знак =, как тут: A o = t; то это в принципе аналогично этой записи? A* o = new A(t); т.е. в обоих случаях мы вызываем конструктор с передачей параметра t ? |
|||
|
||||
| azesmcar |
|
||||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
потому что &t это адрес типа A* мы получаем ссылку типа A& (см. Различия ссылок и указателей)
Абсолютно то же самое...это как написать string k = "AAA"; string t = k и string t (k); Обо позволительно...оба вызывают copy constructor
Точно так ;) |
||||||
|
|||||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 16 Всего: 98 |
эта запись для компилятора -- ты явно конструктор не вызываеш и на вход ему передается не объект, а ссылка на объект ( для скорости )
во втором случае: A* o = new A(); ( или что ему нужно ) -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| Wowa |
|
|||
|
Эксперт Профиль Группа: Админ Сообщений: 15017 Регистрация: 14.9.2000 Где: Винград Репутация: нет Всего: 290 |
а можно тогда в этом случае передать больше одного параметра?
|
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 16 Всего: 98 |
нет.
в конструктор копирования передается только один параметр -- ссылка на копируемый объект. все остальное можно передать через этот же объект -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| Wowa |
|
|||
|
Эксперт Профиль Группа: Админ Сообщений: 15017 Регистрация: 14.9.2000 Где: Винград Репутация: нет Всего: 290 |
Ок, а если это к примеру обычный конструктор? |
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 16 Всего: 98 |
тогда без проблем.
сколько опишеш -- столько и передавать можно ( можно несколько конструкторов прописать ) -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| Wowa |
|
|||
|
Эксперт Профиль Группа: Админ Сообщений: 15017 Регистрация: 14.9.2000 Где: Винград Репутация: нет Всего: 290 |
но как этим способом?
A o = t; Если через new, то можно было бы в скобках через запятую. |
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 16 Всего: 98 |
в этом варианте никак -- такой записью ты говориш, что хочеш получить копию объекта ( и зачем его заново создавать? )
-------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |