crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> задачка № 7, (скорее вопрос, по для меня задачка)
Litkevich Yuriy
  опции профиля:
сообщение 12.4.2008, 18:48
Сообщение #1


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9656
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Наткнулся в Qt'явых примерах на такой код:
QTableWidgetItem *SpreadSheetItem::clone() const
{
    SpreadSheetItem *item = new SpreadSheetItem();
    *item = *this;
    return item;
}

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

this позволит данные текущего экземпляра скопировать?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
archimed7592
  опции профиля:
сообщение 13.4.2008, 0:26
Сообщение #2


Участник
**

Группа: Участник
Сообщений: 127
Регистрация: 27.12.2007
Из: Moscow
Пользователь №: 56

Спасибо сказали: 0 раз(а)




Репутация:   0  


Смотри:
int a = 5;
int b;
int *pA = &a;
int *pB = &b;
*pB = *pA;

Здесь pB играет роль указателя на вновь созданый объект, а pA - на изначальный.
Остальное - обыкновенное присваивание(либо сгенерённое компилятором, либо написаный автором класс operator =).

Сообщение отредактировал archimed7592 - 13.4.2008, 0:29
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Novak
  опции профиля:
сообщение 13.4.2008, 12:40
Сообщение #3


Активный участник
***

Группа: Участник
Сообщений: 319
Регистрация: 15.3.2008
Из: Замкадыш
Пользователь №: 121

Спасибо сказали: 28 раз(а)




Репутация:   6  


В данном случае, я думаю, как раз подразумевается обязательная перегрузка оператора =.
Потому для реализации функции копирования (клонирования) и создается сначала просто объект класса, потом перегруженным присваиванием в него копируются изначальный объект. Потому, да
Цитата
this позволит данные текущего экземпляра скопировать
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
archimed7592
  опции профиля:
сообщение 13.4.2008, 13:38
Сообщение #4


Участник
**

Группа: Участник
Сообщений: 127
Регистрация: 27.12.2007
Из: Moscow
Пользователь №: 56

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата
В данном случае, я думаю, как раз подразумевается обязательная перегрузка оператора =.

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

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

Вообще говоря классики рекомендуют делать это так:
T *T::clone() const
{
    return new T(*this);
}
Т.е. посредством конструктора копирование, ибо это есть труъ ;).
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 18.10.2019, 21:35