Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: задачка № 7
Форум на CrossPlatform.RU > Разработка > С\С++
Litkevich Yuriy
Наткнулся в Qt'явых примерах на такой код:
QTableWidgetItem *SpreadSheetItem::clone() const
{
    SpreadSheetItem *item = new SpreadSheetItem();
    *item = *this;
    return item;
}

смысл строчки ( *item = *this; ) непойму,
ведь экземпляр уже создан, и именно этого класса ( SpreadSheetItem *item = new SpreadSheetItem(); )

this позволит данные текущего экземпляра скопировать?
archimed7592
Смотри:
int a = 5;
int b;
int *pA = &a;
int *pB = &b;
*pB = *pA;

Здесь pB играет роль указателя на вновь созданый объект, а pA - на изначальный.
Остальное - обыкновенное присваивание(либо сгенерённое компилятором, либо написаный автором класс operator =).
Novak
В данном случае, я думаю, как раз подразумевается обязательная перегрузка оператора =.
Потому для реализации функции копирования (клонирования) и создается сначала просто объект класса, потом перегруженным присваиванием в него копируются изначальный объект. Потому, да
Цитата
this позволит данные текущего экземпляра скопировать
archimed7592
Цитата
В данном случае, я думаю, как раз подразумевается обязательная перегрузка оператора =.

А чем сгенерённый компилятором оператор здесь не подходит? Разве что только тем, что он открыт...

Цитата
Потому для реализации функции копирования (клонирования) и создается сначала просто объект класса, потом перегруженным присваиванием в него копируются изначальный объект.

Вообще говоря классики рекомендуют делать это так:
T *T::clone() const
{
    return new T(*this);
}
Т.е. посредством конструктора копирование, ибо это есть труъ ;).
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.