Форум программистов, компьютерный форум CyberForum.ru

Найти ошибку в перегрузке копиконструктора и операторов - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ чтение матрицы из файла http://www.cyberforum.ru/cpp-beginners/thread879782.html
Здравствуйте. Помогите, пожалуйста сделать запрос в самом начале программы(считать из файла или ввести вручную) и организовать само считывание вот текст программы #include <iostream> #include <iomanip> #include <ctime> #include <cmath> #include <iomanip> #include <fstream> #include <conio.h>
C++ Класс "Точка". Функция - определение в каком координатном угле находится точка 1. Определить в глобальной области видимости функцию в соответствии с вариантом. Доступ к полям класса осуществить с помощью соответствующих методов класса; 2. Определить дружественную функцию с аналогичной функциональностью; 3. В функции main вывести на экран результаты работы обеих функций для заданного объекта (номер объекта в массиве вводится с клавиатуры). Результаты работы функций должны... http://www.cyberforum.ru/cpp-beginners/thread879762.html
Из нерассортированного списка целых чисел удалить все наибольшие элементы, оставив первый из них C++
Доброго времени суток. Никак не могу сделать эти задания(( Буду премного благодарен тому, кто поможет мне хоть с одной из них! Из нерассортированного списка целых чисел удалить все наибольшие элементы, оставив первый из них. Выручите плиз! Очень нужны эти задачи!
Перевести целое отрицательное четырёхбайтное число из десятичной в двоичную систему счисления C++
Доброго времени суток. Никак не могу сделать эти задания(( Буду премного благодарен тому, кто поможет мне хоть с одной из них! Перевести целое отрицательное четырёхбайтное число из десятичной в двоичную систему счисления: (повторение) используя алгоритм деления на 2 (см. первый семестр); (повторение) используя битовые операции (см. первый семестр); используя объединение и поля битов.
C++ Шаблонный класс (конструктор по умолчанию, основной конструктор и конструктор копирования; перегрузить операторные функции) http://www.cyberforum.ru/cpp-beginners/thread879747.html
5.1. Разработать шаблонный класс Set. Класс должен содержать конструктор по умолчанию, основной конструктор и конструктор копирования. Перегрузить в этом классе операторные функции, которые обеспечивают ввод/вывод элементов класса, а также операторную функцию присваивания. Кроме этого перегрузить операторные функции * и *=, которые вычисляют пересечение двух множеств. Создать с помощью этого...
C++ В одномерных массиве вычислить произведение элементов в значении которое не менее числа 1 В одномерных массиве вычислить произведение элементов в значении которое не менее числа 1. Заменить этим произведением первый и последний элемент массива. Оформить в виде, функций . Спасибо заранее) подробнее

Показать сообщение отдельно
lemegeton
 Аватар для lemegeton
2913 / 1342 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
27.05.2013, 07:51     Найти ошибку в перегрузке копиконструктора и операторов
Цитата Сообщение от Hellko Посмотреть сообщение
Копи конструктор и оператор присваивания они идентичны внутри.
Они не идентичны, но похожи. В операторе присваивания нет списков ининицализации и уже существуют данные, т.е. придется освобождать возможно выделенную память. Кроме того, в операторе присваивания нужно проверить, не совпадает ли объект с присваиваемым.

Поскольку эти операции действительно похожи, хорошо бы выделить саму процедуру копирования в отдельный метод. Что-то вроде:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
 public:
  arr_vec &copyFrom(const arr_vec &other)  {
    // проверка, что объекты разные
    if (this != &other) {
      // тут надо написать свой код. :) 
      // освобождение выделенной памяти,
      /*
       *delete [] x;
       */
      ...
      // копирование данных из переданного объекта
      /*
       *n = other.n;
       *x = new double[n];
       *for (int i = 0; i != n; ++i) {
       *  x[i] = other.x[i];
       *}
       */
      ...
    }
    return *this;
  }
  // конструктор копирования.
  // динамической переменной присваивается значение 0
  // такое значение можно безопасно удалять delete'ом.
  arr_vec(const arr_vec &other) : x(0) {
    copyFrom(other);
  }
  // оператор присваивания
  // нет списка инициализации, метод однозначно
  // должен освобождать память, выделенную под x
  arr_vec &operator=(const arr_vec &other) {
    return copyFrom(other);
  }
 
Текущее время: 01:36. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru