| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Что такое Copy-Konstruktor? |
| Автор: Wowa 14.2.2005, 15:42 |
| Что такое Copy-Konstruktor? |
| Автор: chaos 14.2.2005, 15:58 | ||
это конструктор копирования )
|
| Автор: Wowa 14.2.2005, 15:59 | ||
ну и для чего он нужен? |
| Автор: azesmcar 14.2.2005, 16:02 | ||
Copy Constructor, само имя подсказывает копирующий конструктор...
Предназначен для копирования одного обьекта в другого... A t; A o; o = t; //Вызывается copy constructor Если его не написать он генерируется автоматически, но бывают случаи когда его нужно переопределить...например ты пишешь класс для string -а вроде AnsiString. Если присвоить один обьект другому получается что char * который хранится в нем просто просвоит адрес другого обьекта, а надо скопировать данные... Надеюсь обьяснил нормально??? |
| Автор: Wowa 14.2.2005, 16:11 |
| А, т.е. это создано для копирования объектов? А я думал, что это что-то имеет общего с конструктор-функцией. |
| Автор: azesmcar 14.2.2005, 16:27 | ||
| Извиняюсь, небольшая ошибка.. Вот так верно...
в первом случае работает оператор присваивания... |
| Автор: Wowa 14.2.2005, 16:38 | ||
| Т.е. в твоем коде произойдет простое копирование объекта? А вот это сам копи-конструктор.
Получается ему в качестве параметра передаем сам объект t. А почему не &t ? Ведь в копи-конструкторе мы по идее должны принять адрес памяти, по которому располагается объект t ? Добавлено @ 16:47 Если мы ставим знак =, как тут: A o = t; то это в принципе аналогично этой записи? A* o = new A(t); т.е. в обоих случаях мы вызываем конструктор с передачей параметра t ? |
| Автор: azesmcar 14.2.2005, 16:59 | ||||||
потому что &t это адрес типа A* мы получаем ссылку типа A& (см. Различия ссылок и указателей)
Абсолютно то же самое...это как написать string k = "AAA"; string t = k и string t (k); Обо позволительно...оба вызывают copy constructor
Точно так ;) |
| Автор: _hunter 14.2.2005, 17:00 |
| эта запись для компилятора -- ты явно конструктор не вызываеш и на вход ему передается не объект, а ссылка на объект ( для скорости ) во втором случае: A* o = new A(); ( или что ему нужно ) |
| Автор: Wowa 14.2.2005, 17:01 | ||
а можно тогда в этом случае передать больше одного параметра?
|
| Автор: _hunter 14.2.2005, 17:04 |
| нет. в конструктор копирования передается только один параметр -- ссылка на копируемый объект. все остальное можно передать через этот же объект |
| Автор: Wowa 14.2.2005, 17:05 | ||
Ок, а если это к примеру обычный конструктор? |
| Автор: _hunter 14.2.2005, 17:07 |
| тогда без проблем. сколько опишеш -- столько и передавать можно ( можно несколько конструкторов прописать ) |
| Автор: Wowa 14.2.2005, 17:08 |
| но как этим способом? A o = t; Если через new, то можно было бы в скобках через запятую. |
| Автор: _hunter 14.2.2005, 17:12 |
| в этом варианте никак -- такой записью ты говориш, что хочеш получить копию объекта ( и зачем его заново создавать? ) |