Russian Qt Forum
Ноябрь 23, 2024, 20:21 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: [решено] Метод для копирования элемента класса  (Прочитано 2500 раз)
horror812
Гость
« : Март 25, 2011, 22:04 »

Всем привет.
У меня простой вопрос)
как правильно методом класса копировать объект.
Код:
class A
{...
   A(const A &a) // конструктор копирования
   A copy()  // метод
  { ...
    return A(*this);
  }
};

A a;
A b = a.copy();

Я это к чему спрашиваю, в сиПП  у меня не много опыта,
но во всех исходниках, которые я покапал.
обычно копирует так
Код:
A  A::copy() const {    return A(*this);}

A b(a.copy())


или через указатель
Код:
A*  A::copy() {    return new A(*this);}

A *b = a.copy()

Мой первоначальный вариант
я нигде не встретил.
Он  правильный?
Спасибо.



« Последнее редактирование: Март 26, 2011, 00:04 от horror812 » Записан
brankovic
Гость
« Ответ #1 : Март 25, 2011, 22:49 »

Он  правильный?

более-менее
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #2 : Март 25, 2011, 23:19 »

Не видно чем Ваш способ отличается от исходников. А вообще это довольно борзо - возвращать объект по значению. В Qt это может быть безболезненно, в др местах - нет. И в чем смысл метода если он только повторяет конструктор копирования или оператор присваивания? Если нужно что-то специальное, лучше напр так

Код
C++ (Qt)
void ClassA::CopyBuffer( ClassA & dest )
{
 ...
}
 
Записан
horror812
Гость
« Ответ #3 : Март 26, 2011, 00:03 »

Спасибо.
Ок, буду писать как у вас)

он у меня не только повторяет, просто для примера показал коротко.
Мне это нужно к примеру
Код:
class A
{
...
  float *array; 
  void abs(); // убираем знак по всему массиву
  A copyAbs() // получить новый элемент с массивом  +знач...
  {
     A c(*this);
     c.abs();
     return c;
  }
}

Спасибо


Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.075 секунд. Запросов: 22.