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

Деструктор класа, ошибка - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ динамич. структуры данных http://www.cyberforum.ru/cpp-beginners/thread111497.html
В файловой системе каталог файлов организован в виде линейного списка. Для каждого файла в каталоге содержатся след. сведения: 1. имя файла 2. дата создания 3. количество обращений к файлу Написать программу, которая обеспечивает * начальное формирование каталога файлов * вывод каталога * удаление файлов, дата создания которых меньше заданной * выборку файла с наибольшим количеством...
C++ Обратный перевод в восьмиричную систему Целое положительное число m записывается в восьмеричной системе счисления, и разряды в этой записи переставляются в обратном порядке. Получившееся число принимается за значение функции F(m). Например, m=477, F(m)=351. Помогите зделать пожалуйста, на форуме искал, не нашёл прогу перевода в 8ю, может искал плохо...а дальше вообще не могу понять что и как. Объясните пожалуйста. Добавлено через... http://www.cyberforum.ru/cpp-beginners/thread111479.html
Задание по функциям C++
Написать программу, которая определяет сумму n-значных чисел, которые содержат только не парные цифры. Определить так же, сколько парных цифр в найденной сумме. короче я ввожу с клавиатуры число, это значит сколько цифр в числе, и мы их перебираем и ищем сумму... например если вводим число 3, то перебираем и ищем сумму чисел с непарными цифрами в диапазоне от 100 до 999 помогите решить...
C++ Калькулятор на С++
нужен калькулятор из 10-13 операций... На С++ ... Плиз.. описание на сколько можно просто... В граф оболочке... На курсовую...
C++ Поиск с использованием ряда Фибоначчи http://www.cyberforum.ru/cpp-beginners/thread111451.html
Помогите, пожалуйста в предоставлении алгоритма. Весь интернет облазил - ничего нету. Хотя я уверен, что такой поиск существует. Извиняюсь за ошибку в названии темы.
C++ первый пробел в строке вообщем проблема есть текст – некоторое количество строк. 1)Сжать строки текста удалением левых, правых пробелов и заменой одним пробелом групп внутренних последовательных пробелов. 2)Сжатые строки отсортировать по убыванию средней длины их слов вот то что есть #include <iostream> #include <locale> #include <string> подробнее

Показать сообщение отдельно
hoggy
6419 / 2637 / 458
Регистрация: 15.11.2014
Сообщений: 5,822
Завершенные тесты: 1
18.06.2015, 22:23     Деструктор класа, ошибка
Цитата Сообщение от pety Посмотреть сообщение
Если не сложно, объясните, что значит
typedef class Vector
рассмотрим код:

C++
1
2
3
4
typedef class Vector
{
 
} Point;
здесь имя класса - Vector.
но у него есть другое имя (псевдоним) - Point

можно делать так:
C++
1
Vector vec;
можно так:
C++
1
Point p;
это будет создание двух экземпляров одного и того же класса.

Добавлено через 21 минуту
Цитата Сообщение от savak Посмотреть сообщение
Проблемы здесь, как я понял в деструкторе класса.
Нарушение правила "трех": если конструктор аллоцирует память по указателю при помощи new, значит требуются так же конструктор копии, и оператор=

лекарство:

http://rextester.com/PNKOC97940

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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
#include <iostream>
using namespace std;
 
#include <math.h>
#define PI 3.14159265358979323846264338327950
 
typedef class Vector
{
    size_t n_elements;
    double* x;
 
public:
    template<class T> friend
    std::basic_ostream<T>&
        operator<<(::std::basic_ostream<T>& os, const Vector& obj )
        {
            for(size_t n = 0; n< obj.n_elements; ++n)
                os<< obj.x[n]<<", ";
            return os;
        }
    
public:
    Vector();
    Vector(const double x1, const double y1, const double z1);
    Vector(const size_t n_elem, const double n = 0);
    Vector(const Vector& rhs);
    Vector(Vector&& rhs);
 
   ~Vector() {delete[] x;}
 
    const Vector& operator=(const Vector& rhs);
    const Vector& operator=(Vector&& rhs);
    
    double& operator() (const size_t i);
    double& operator() (const size_t i) const {return x[i];}
 
    size_t Count() const;
 
    double Length() const;      
    Vector Normalize() const;   
} Point;
 
Vector::Vector()
    : n_elements(3)
    , x(new double[n_elements])
{
    for(size_t i = 0; i < n_elements; ++i)
        x[i] = 0;
}
 
Vector::Vector(const double x1, const double y1, const double z1)
    : n_elements(3)
    , x(new double[n_elements])
 
{ x[0] = x1; x[1] = y1; x[2] = z1; }
 
Vector::Vector(const size_t n_elem, const double n)
    : n_elements(n_elem)
    , x(new double[n_elements])
 
{
    for(size_t i = 0; i < n_elements; ++i)
        x[i] =  n;
}
 
Vector::Vector(const Vector& rhs)
    :n_elements(rhs.n_elements)
    ,x(new double[n_elements])
{
    for(size_t i = 0; i < n_elements; ++i)
        x[i] =  rhs.x[i];
}
 
Vector::Vector(Vector&& rhs)
    :n_elements(rhs.n_elements)
    ,x(new double[n_elements])
{
    rhs.n_elements = 0;
    rhs.x=nullptr;
}
 
const Vector& Vector::operator=(const Vector& rhs)
{
    delete[] x;
    n_elements = rhs.n_elements;
    x = new double[n_elements];
    
    for(size_t i = 0; i < n_elements; ++i)
        x[i] =  rhs.x[i];
    return *this;
}
 
const Vector& Vector::operator=(Vector&& rhs)
{
    delete[] x;
    n_elements = rhs.n_elements;
    x = rhs.x;
    
    rhs.n_elements = 0;
    rhs.x=nullptr;
    
    return *this;
}
 
 
double& Vector::operator() (const size_t i)
    { return x[i]; }
 
size_t Vector::Count() const
    { return n_elements; }
 
double Vector::Length() const
{
    double c = 0;
    for(size_t i = 0; i < n_elements; ++i)
        c += x[i]*x[i];
    return sqrt(c);
}
 
Vector Vector::Normalize() const
{
    Vector A = *this;
    for(size_t i = 0; i < n_elements; ++i)
        A.x[i] = A.x[i] / Length();
    return A;
}
 
 
int main()
{
    Point a(1,2,3);
    
    std::cout<<"point: "<< a << std::endl;
    
    a.Normalize();
    
    a = a.Normalize();
    
    Point b( Vector(4,5,6) );
    std::cout<<"point: "<< b << std::endl;
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru