Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Что такое Copy-Konstruktor? 
:(
    Опции темы
Wowa
  Дата 14.2.2005, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

Репутация: нет
Всего: 290



Что такое Copy-Konstruktor?
PM WWW   Вверх
chaos
Дата 14.2.2005, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 6
Всего: 44



это конструктор копирования )
Код

class T
{
...
public:
 T(const T&);
...
}


Это сообщение отредактировал(а) chaos - 14.2.2005, 16:01
PM WWW   Вверх
Wowa
Дата 14.2.2005, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

Репутация: нет
Всего: 290



Цитата(chaos @ 14.2.2005, 13:58)
это конструктор копирования )

ну и для чего он нужен? smile
PM WWW   Вверх
azesmcar
Дата 14.2.2005, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Copy Constructor, само имя подсказывает копирующий конструктор...
Код

class A()
{
A( const A& p );
};



Предназначен для копирования одного обьекта в другого...
A t;
A o;
o = t; //Вызывается copy constructor
Если его не написать он генерируется автоматически, но бывают случаи когда его нужно переопределить...например ты пишешь класс для string -а вроде AnsiString.
Если присвоить один обьект другому получается что char * который хранится в нем просто просвоит адрес другого обьекта, а надо скопировать данные...
Надеюсь обьяснил нормально??? smile Если чего неясно пиши...
PM   Вверх
Wowa
Дата 14.2.2005, 16:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

Репутация: нет
Всего: 290



А, т.е. это создано для копирования объектов? А я думал, что это что-то имеет общего с конструктор-функцией.
PM WWW   Вверх
azesmcar
Дата 14.2.2005, 16:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Извиняюсь, небольшая ошибка..
Вот так верно...
Код

class A()
{
A( const A& p );
};

A t;
A o = t; //Вызывается copy constructor


в первом случае работает оператор присваивания...
PM   Вверх
Wowa
Дата 14.2.2005, 16:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

Репутация: нет
Всего: 290



Т.е. в твоем коде произойдет простое копирование объекта?


А вот это сам копи-конструктор.
Код

A( const A& p );


Получается ему в качестве параметра передаем сам объект t. А почему не &t ?
Ведь в копи-конструкторе мы по идее должны принять адрес памяти, по которому располагается объект t ?
Добавлено @ 16:47
Если мы ставим знак =, как тут:
A o = t;


то это в принципе аналогично этой записи?
A* o = new A(t);

т.е. в обоих случаях мы вызываем конструктор с передачей параметра t ?
PM WWW   Вверх
azesmcar
Дата 14.2.2005, 16:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Цитата
Получается ему в качестве параметра передаем сам объект t. А почему не &t ?


потому что &t это адрес типа A* мы получаем ссылку типа A& (см. Различия ссылок и указателей)
Цитата
Если мы ставим знак =, как тут:то это в принципе аналогично этой записи?
A* o = new A(t);
A o = t;

Абсолютно то же самое...это как написать
string k = "AAA";
string t = k и string t (k);

Обо позволительно...оба вызывают copy constructor

Цитата
т.е. в обоих случаях мы вызываем конструктор с передачей параметра t ?

Точно так ;)
PM   Вверх
_hunter
Дата 14.2.2005, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 16
Всего: 98



эта запись для компилятора -- ты явно конструктор не вызываеш и на вход ему передается не объект, а ссылка на объект ( для скорости )
во втором случае:
A* o = new A();
( или что ему нужно )



--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Wowa
Дата 14.2.2005, 17:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

Репутация: нет
Всего: 290



а можно тогда в этом случае передать больше одного параметра?
Цитата(Admin @ 14.2.2005, 14:38)
A o = t;


PM WWW   Вверх
_hunter
Дата 14.2.2005, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 16
Всего: 98



нет.
в конструктор копирования передается только один параметр -- ссылка на копируемый объект. все остальное можно передать через этот же объект


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Wowa
Дата 14.2.2005, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

Репутация: нет
Всего: 290



Цитата(_hunter @ 14.2.2005, 15:04)
нет.
в конструктор копирования передается только один параметр -- ссылка на копируемый объект. все остальное можно передать через этот же объект

Ок, а если это к примеру обычный конструктор?
PM WWW   Вверх
_hunter
Дата 14.2.2005, 17:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 16
Всего: 98



тогда без проблем.
сколько опишеш -- столько и передавать можно ( можно несколько конструкторов прописать )


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Wowa
Дата 14.2.2005, 17:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

Репутация: нет
Всего: 290



но как этим способом?
A o = t;
Если через new, то можно было бы в скобках через запятую.
PM WWW   Вверх
_hunter
Дата 14.2.2005, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 16
Всего: 98



в этом варианте никак -- такой записью ты говориш, что хочеш получить копию объекта ( и зачем его заново создавать? )


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0559 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.