crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> Клонирование
ruzik
  опции профиля:
сообщение 25.3.2012, 21:57
Сообщение #1


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

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

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




Репутация:   0  


Здравствуйте, нужно переопределить функцию клонирования в наследнике QStandardItem с учетом нового члена класса
Вот что получилось у меня:
#ifndef RDATAITEM_H
#define RDATAITEM_H
//--------Qt
#include "QStandardItem"
//-------My and other headers
#include "Classes/RDataItemModel/RDataItemModel.h"
//-------
class RDataItemModel;

class RDataItem : public QStandardItem
{
public:
//***********/
    void setItemType(const RDataItemModel::itemType tp) { type = tp; }
    RDataItemModel::itemType getItemType() const { return type; }

     QStandardItem *clone() const;
     void setValue(const RDataItem * item) { *this = *item; }
private:
    RDataItemModel::itemType type;
};

#endif

//-------My and other headers
#include "RDataItem.h"
//-------

QStandardItem *RDataItem::clone() const
{
    RDataItem *item = new RDataItem(text());
    item->setValue(this);
    item->setItemType(getItemType());

    return item;
}

Нельзя ли как-то более понятно и красиво реализовать это дело, а то согласитесь, использовать для этого отдельную функцию, которую пришлось сделать публичной не есть правильно
Заранее спасибо!

Сообщение отредактировал ruzik - 25.3.2012, 21:58
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
wiz29
  опции профиля:
сообщение 26.3.2012, 8:54
Сообщение #2


Старейший участник
****

Группа: Участник
Сообщений: 600
Регистрация: 7.7.2010
Из: Санкт-Петербург
Пользователь №: 1866

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




Репутация:   12  


такая стратегия имеет место быть, и дело тут не в "некрасивости". При разных объектных моделях используют разные подходы. Можно переопределить конструктор копирования или создать фабрику клонирования, это уже зависит от конкретной задачи. Но, обычно, клонирующая функция является виртуальной. Можно посмотреть тут различные подходы к решению твоей проблемы более детально.

Сообщение отредактировал wiz29 - 26.3.2012, 8:55
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ruzik
  опции профиля:
сообщение 26.3.2012, 10:15
Сообщение #3


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

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

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




Репутация:   0  


Цитата
Но, обычно, клонирующая функция является виртуальной.

Она и в данном случае ей является :)
Буду смотреть, спасибо за помощь!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 29.3.2024, 16:03