Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
0 / 0 / 0
Регистрация: 08.09.2014
Сообщений: 88

Реализация конструкторов и деструктора

21.10.2015, 11:47. Показов 1829. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Дорогие форумчане!
В своем обучение дошел до создания класса.
В этом примере должны были заработать конструкторы и деструктор:

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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
//Программа "Реализация конструкторов и деструктора"
/*
 
*/
#include <iostream>
#include <conio.h>
#include <algorithm>
 
using namespace std;
 
class array
{
 public:
 typedef unsigned int UINT;
 array(UINT size = 10, double k = 0.0);
 array(int l, int r, double k = 0.0);
 array(const array &a);
 array(const array &a, int l, int r);
 array(const double * const begin, const double * const end);
 ~array();
 double& operator[] (int index);
 array& operator=(const array &a);
 array& assign(const array, int left, int right);
 array& assign(const double *begin, const double * end);
 array operator+=(const double &a);
 array operator-=(const double &a);
 array operator*=(const double &a);
 array operator/=(const double &a);
 int Left() const;
 int Right() const;
 UINT size() const;
 double& max_value();
 double& min_value();
 double summa();
 double product();
 void operator~();
 double* find(double a);
 friend array operator+(const array&a, const array &b);
 friend array operator*(const array&a, const array &b);
 friend double product_iner(const array&a, const array &b);
 friend ostream& operator << (ostream& t, const array&a);
 friend istream& operator >> (istream& t, array& a);
 private:
 double* data;
 double dummy;
 int left, right;
 UINT size_array;
};
array::array(const double * const begin, const double * const end)
{ if (begin < end)
   {
    size_array = (end - begin);
    left = 0; right = size_array - 1;
    data = new double[size_array];
    copy(begin, end, data);
   }
}
array::array(const array &a, int l, int r)
{ if ((l < r) && (a.left <= 1) && (r <= a.right))
   {
    left = 1; right = r; size_array = (right - left) + 1;
    data = new double[size_array];
    copy(a.data + (1 - a.left),
         a.data + (1 - a.left) + size_array, data);
   }
}
array::~array(){ delete[]data; data = 0; }
 
 
int main(void)
{
double a[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
array A;
array B(a, a + (sizeof(a)/sizeof(double)));
array D(a + 3, a + 7);
array C(-2, +5);
array F(-5, +5, 2.2);
array G(B);
array X(F,0,5);
array Z(20);
array W(10u, -1.0);
 
getch();
return 0;
}
Но выдаёт ошибки:
C++
1
2
3
4
Build
  [Linker Error] Unresolved external 'array::array(int, int, double)' referenced from D:\ПРОГРАММИРОВАНИЕ C\РАБОТА С УЧЕБНИКОМ ЛАПТЕВА\9. ДИНАМИЧЕСКИЕ КЛАССЫ\9.2 РЕАЛИЗАЦИЯ КОНСТРУКТОРОВ И ДЕСТРУКТОРА\UNIT1.OBJ
  [Linker Error] Unresolved external 'array::array(const array&)' referenced from D:\ПРОГРАММИРОВАНИЕ C\РАБОТА С УЧЕБНИКОМ ЛАПТЕВА\9. ДИНАМИЧЕСКИЕ КЛАССЫ\9.2 РЕАЛИЗАЦИЯ КОНСТРУКТОРОВ И ДЕСТРУКТОРА\UNIT1.OBJ
  [Linker Error] Unresolved external 'array::array(unsigned int, double)' referenced from D:\ПРОГРАММИРОВАНИЕ C\РАБОТА С УЧЕБНИКОМ ЛАПТЕВА\9. ДИНАМИЧЕСКИЕ КЛАССЫ\9.2 РЕАЛИЗАЦИЯ КОНСТРУКТОРОВ И ДЕСТРУКТОРА\UNIT1.OBJ
Почему?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.10.2015, 11:47
Ответы с готовыми решениями:

Наследование конструкторов с параметрами и деструктора
Данно два класс. Родитель: class entity { private: int ID = 0; class object_list * list_; protected: std::string...

Использование конструкторов и деструктора при проектировании пользовательского класса
Дан одномерный массив A. Найти max (a2, a4, …, a2k) + min (a1, a3, …, a2k+1).

Разработать класс для массива строк c наличием нескольких конструкторов и деструктора
Разработать класс для массива строк. Написать несколько конструкторов, в том числе конструктор копирования. Реализовать методы для...

5
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
21.10.2015, 12:04
Лучший ответ Сообщение было отмечено avovana как решение

Решение

Он говорит: "Ты мне пообещал, что будут конструкторы
C++
1
array::array(int, int, double)
C++
1
array::array(const array&)
C++
1
array::array(unsigned int, double)
а реализацию не описал."

У вас 5 конструкторов в описании и только 2-ум вы дали тело.
2
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
21.10.2015, 12:10
avovana, убери в пути к файлу кириллицу (должны быть только латинские буквы) и поменяй название класса (класс array уже имеется в стандартной библиотеке, отсюда тоже могут быть проблемы).

P.S. Невнимательно прочитал описание проблемы. rikimaru2013 прав.
1
0 / 0 / 0
Регистрация: 08.09.2014
Сообщений: 88
21.10.2015, 13:44  [ТС]
Хорошо. Остальные заккоментировал, заработало.
Единственное, что когда навожу на созданный и проинициализированный объект, он мне подсвечивает "data::" в которой совсем не числа с массива (может адрес?)

Добавлено через 8 минут
Да. Сам ответил на свой вопрос


Еще вопрос:
Добавлено через 12 минут
C++
1
array::~array(){ delete[]data; data = 0; }
Здесь, я так понимаю, освобождается место, выделенное ранее.
Почему синтаксис с []?

Добавлено через 10 минут
Это просто синтаксис для операции удаления
0
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
21.10.2015, 14:18
Цитата Сообщение от avovana Посмотреть сообщение
Почему синтаксис с []?
это значит что освобождаете память выделенную под массив)

C++
1
2
3
4
5
int * p = new int;
delete p;
 
int * p = new int[10];
delete [] p;
1
0 / 0 / 0
Регистрация: 08.09.2014
Сообщений: 88
21.10.2015, 15:04  [ТС]
Сделал конструктор копирования:
C++
1
2
3
4
5
6
array::array(const array &a)
{ data = a.data;
  left = a.left;
  right = a.right;
  size_array = a.size_array;
}
Сделал функцию присваивания:
C++
1
2
array& array:: operator=(const array &t)
{ array temp(t); Swap(temp); return *this; }
Для нее функцию в классе:
C++
1
2
3
4
5
 void Swap(array &other)
{ swap(data, other.data);
  swap(left, other.left);
  swap(right, other.right);
  swap(size_array, other.size_array);
Всё присваивает:
C++
1
2
3
4
5
6
double a[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
 
array B(a, a + (sizeof(a)/sizeof(double)));
array D(a + 3, a + 7);
 
B = D;
Но на моменте выхода из программы и работы деструктора вылезает программная ошибка.


С такой функцией присваивания работает без проблем:
C++
1
2
3
4
5
6
7
8
9
10
11
12
array& array::operator=(const array &a)
{ if (this != &a)
  { double *new_data = new double[a.size_array];
    copy(a.data, a.data + a.size_array, new_data);
    delete[] data;
    data = new_data;
    left = a.left;
    right = a.right;
    size_array = a.size_array;
  }
  return *this;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.10.2015, 15:04
Помогаю со студенческими работами здесь

Реализация деструктора в классе list
Добрый день всем! Вопрос по деструктору. Настал момент когда я решил все сделать правильно. И теперь просто не понимаю что писать в...

Shared_str реализация - На выходе из деструктора падает программа
Решил реализовать shared_str class shared_ptrMy { private: Storage *st; public:

Реализация трех конструкторов и деструктура для класса Date
:gconfusion: :confusion: Разработайте класс DATE, в котором хранится информация о дате (число, месяц и год). В классе должны быть...

Использование конструкторов и деструктора при проектировании пользовательского класса
1. Создать класс с именем PRICE, содержащий следующие поля: ■ название товара; ■ название магазина, в котором продается...

Реализация класса (конструктора и деструктора)
Нужна помощь в исправлении программы (в Dev c++ компилируется и работает, а в Visual Studio - нет) #include &lt;iostream.h&gt; #include...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru