Форум программистов, компьютерный форум 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. Заменить этим произведением первый и последний элемент массива. Оформить в виде, функций . Спасибо заранее) подробнее

Показать сообщение отдельно
Hellko
6 / 6 / 1
Регистрация: 17.11.2012
Сообщений: 65
26.05.2013, 22:16  [ТС]     Найти ошибку в перегрузке копиконструктора и операторов
Слегка поправил последнюю версию ибо в спешке исправлял в прошлый раз:
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
#include <iostream>
using namespace std;
 
struct vec {double x,y,z;}; //структура векторов содержащая значения х у z
class arr_vec {
private:
    vec *x; //объявляем указатель на вектор (х - будет массивом векторов)
    int n;//количество элементов массива
public:
    arr_vec(int);//конструктор принимает количество элементов массива
    arr_vec(const arr_vec&); //копиконструктор
    ~arr_vec();//деструктор
    void set(int,vec); //устанавливает новый вектор vec на позицию int
    void operator=(const arr_vec&); //оператор присваивания
    vec operator[](int) const;//оператор возвращает вектор с позиции int
    friend arr_vec operator+(const arr_vec&,const arr_vec&);
    friend arr_vec operator*(const arr_vec&,double); //ВЕКТОР УМНОЖИТЬ НА ЧИСЛО
    friend arr_vec operator*(double,const arr_vec&);  //ЧИСЛО УМНОЖИТЬ НА ВЕКТОР
    void show();
};
 
vec operator+(vec a, vec b); //оператор складывания массивов векторов (прототип, чтоб компилятор знал что он есть)
vec operator*(vec a, double b);//оператор умножения вектора на число (аналогично)
 
arr_vec::arr_vec(const arr_vec& A) { //копиконструктор
        n=A.n;      //количество элементов теперь как в массиве А
        x=new vec [n];  //создадим массив векторов из n штук в переменной х
        for(int i=0; i<n; i++)
            x[i]=A.x[i];    //скопируем все значения из А в наш массив
}
 
void arr_vec::operator=(const arr_vec& A) {
        n=A.n;
                x=new vec[n];   //оператор присваивания аналогичен копиконструктору
        for(int i=0; i<n; i++)
                        x[i]=A.x[i];
}
 
vec toVec(double x,double y, double z) {
    vec tmp;
    tmp.x=x;                       //функция создания вектора из 3-х чисел
    tmp.y=y;
    tmp.z=z;
    return tmp;
}
 
arr_vec::arr_vec(int N) { //описание конструктора
    n=N;        //количество элементов массива теперь n=N
    x=new vec [n];  //создадим массив из n элементов
    for(int i=0;i<n;i++) {x[i].x=i; x[i].y=i+1; x[i].z=i+2;} //по умолчанию запполнение всего массива дефолтными значениями
}
 
arr_vec::~arr_vec() { //описание деструктора
    delete[]x;
}
 
void arr_vec::set(int N, vec tmp) { //функция вместо N-ого ветора вставляет этот вектор
    if(n<N) return; //если в массиве 10 элементов а мы хотим записать в 120ый элемент то ничего не делать.
    x[N]=tmp;   //иначе вектор tmp присвоить на место N-ого
}
 
vec arr_vec::operator [](int N) const { //возвращает вектор с номером N
    return x[N];
}
 
arr_vec operator+(const arr_vec& a,const arr_vec& b) { //оператор складывания массивов векторов
    arr_vec c(a.n); //создадим новый массив С с количеством элементов как в а.
    for(int i=0; i<c.n; i++)
        c.set(i,a[i]+b[i]); //присвоим всем элементам значения суммы векторов по элементно
    return c; //вернем этот массив
}
 
vec operator+(vec a, vec b) { //оператор складывания векторов
    return toVec(a.x+b.x,a.y+b.y,a.z+b.z);
}
 
vec operator*(vec a, double b) {//оператор умножения векторов
    return toVec(a.x*b,a.y*b,a.z*b);
}
 
arr_vec operator*(const arr_vec& a,double k) {//оператор умножения массива векторов на число
    arr_vec c(a.n);
    for(int i=0; i<c.n; i++) {
        c.set(i,a[i]*k); //аналогично оператор +
    }
    return c;
}
 
arr_vec operator*(double k, const arr_vec& a) {//умножения числа на вектор
    return a*k; //используем уже существующую функцию для выполнения того же самого что и выше. только поменяв местами.
}
 
void arr_vec::show() {
    cout<<endl<< "X: "; for(int i=0;i<n;i++) cout<<x[i].x<<"  ";
    cout<<endl<< "Y: "; for(int i=0;i<n;i++) cout<<x[i].y<<"  ";
    cout<<endl<< "Z: "; for(int i=0;i<n;i++) cout<<x[i].z<<"  ";
    cout<<endl;
}
 
int main() {
    arr_vec a(5),b(5); //создадим 2 массива из 5 элементов
    vec a1,a2,a3,a4; //создадим 4 пустых вектора
    a1=toVec(1,1,1);    //вектор а1 будет (1,1,1) итд
    a2=toVec(2,1,0);
    a3=toVec(4,3,5);
    a4=toVec(1,-1,9);
    a.set(0,a1); //на 0 место в массиве "а" запишем вектор а1. итд.
    a.set(1,a2);
    b.set(0,a3);
    b.set(1,a4);
    a.show(); //вывести на экран а, и б, их сумму, и опять а, и а*5, и 5*а.
    b.show();
    (a+b).show();
    a.show();
    (a*5).show();
    (5*a).show();
}
 
Текущее время: 07:55. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru