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

Перегрузка операторов, если класс содержит массив - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Выравнивание текста пробелами по ширине. http://www.cyberforum.ru/cpp-beginners/thread1180950.html
Очень нужно написать решение на C++. Кто-нибудь может помочь? Я пытался 2 дня - ничего не получается :( Задача Вашей программе дается абзац текста. Этот текст состоит из ряда слов, отделенных друг от друга пробелами и/или символами новой строки (символы табуляции не применяются). Слово может содержать знаки пунктуации. Текст завершается специальным словом "$$$", которое будет единственным...
C++ Вычислить сумму ряда 4. 4.3. Написать программу, позволяющую вычислить с помощью цикла: 2+4+6+…+2n, где n задается с клавиатуры. http://www.cyberforum.ru/cpp-beginners/thread1180947.html
C++ Написать программу, проверяющую, поместится ли круг в квадрат или наоборот.
3. Заданы круг площади S и квадрат площади Р. Написать программу, проверяющую, поместится ли круг в квадрат или поместится ли квадрат в круг, или они не поместятся друг в друга.
C++ Написать программу, которая по номеру квартиры определяет номер подъезда и этажа, на котором находится квартир
2. В N-этажном доме M подъездов. На каждой лестничной площадке К квартир. Нумерация квартир в доме сквозная, начиная с 1. Написать программу, которая по номеру квартиры определяет номер подъезда и этажа, на котором находится квартира.
C++ Переполнение буфера http://www.cyberforum.ru/cpp-beginners/thread1180934.html
Не могу найти, где у меня ошибка, выдает переполнение буфера, подскажите пожалуйста. Здесь реализуется связный список #include <iostream> #include <conio.h> #include <ctime> #include <stdio.h> #include <iomanip> using namespace std;
C++ Сформировать из считаных из файла чисел матрицу, содержащую 4 столбца Привет всем, помогите исправить код для программы. Задание. В каждом из заданий исходный файл формировать программно. Количество элементов исходного файла неизвестно. Методические рекомендации. Целесообразно для создания бинарного файла создать отдельную программу. Числа могут вводиться либо пользователем, либо счетчиком случайных чисел. Количество чисел в файле задавать случайным образом,... подробнее

Показать сообщение отдельно
zss
Модератор
Эксперт С++
6321 / 5905 / 1913
Регистрация: 18.12.2011
Сообщений: 15,181
Завершенные тесты: 1
19.05.2014, 17:15     Перегрузка операторов, если класс содержит массив
Наследовать тут вроде нечего:
Не думаю, что добавление всего одного нового метода должно служить основанием
для создания производного класса.
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
142
143
144
#include<iostream>
#include<fstream>
#include <cmath>
using namespace std;
 
class delivery {
protected:
   int *mas;
    int n;
public:     
    delivery():n(0) // конструктор по умолчанию
    {
        mas=0;
    }
    delivery(int n0):n(n0)
    {
        mas=new int[n0];
        for(int i=0;i<n;i++)
            mas[i]=0;
    }
    delivery(const delivery& dd):n(dd.n) // копиконструктор
    {
        mas=new int[dd.n];
        for(int i=0;i<n;i++)
            mas[i]=dd.mas[i];
    }
 
    ~delivery(){delete[] mas;}
   delivery& operator=(delivery &t);// возвращает ссылку
   // перегружаем операторы
   delivery operator+(delivery &t);
   //delivery operator==(delivery &t);
   //delivery operator>(delivery &t);
   //delivery operator!=(delivery &t);
    void enterarray();
    void displayarray();
 
    void read(char* filename);
    void count();
};
 
    void delivery::enterarray() {
        for (int i = 0; i < n; i++)  cin >> mas[i]; 
    }
    void delivery::displayarray() {
        for (int i = 0; i < n; i++)  
            cout << mas[i]<<" ";
        cout<<endl;
    }
    void delivery::read(char* filename)
    {
        ifstream f1(filename);
        if (!f1) 
            cout << "file not opened";
        else
           for(int i=0;i<n && !f1.eof();i++)
                f1>>mas[i];
       f1.close();
    }
delivery& delivery::operator=(delivery& dd)
{
    if(mas)
        delete[] mas;
    mas=new int[dd.n];
    for(int i=0;i<n;i++)
        mas[i]=dd.mas[i];
    return *this;
}
delivery delivery::operator+(delivery &t)
{
    delivery temp(*this); 
    for(int i=0;i<n;i++)
        temp.mas[i] += t.mas[i];  
    return temp;
}
 
 void delivery::count()  // здесь метод счета
    { 
        int** mas2=new int*[2];
        for (int j = 0; j < 2; j++)
            mas2[j] = new int[this->n]; // и n столбцов   
        for (int j = 0; j < n; j++)
        {
                mas2[0][j] = this->mas[j];
                mas2[1][j] = 1;
        }   
 
// сортируем массив, счетчик изначально равен Н, 
        for (int i = n-1 ; i >= 0; i--)
        {
            for (int j = 0; j < i; j++)
            {
                if (this->mas[j] > this->mas[j + 1])
                {
                    int tmp = this->mas[j];
                    this->mas[j] = this->mas[j + 1];
                    this->mas[j + 1] = tmp;
                }
            }
        }
        for (int i = 0; i < n; i++)  // счетчик работает.
        {
            for (int j = 0; j < n; j++)
            {
                if ((this->mas[i] == this->mas[j]) && (i != j))
                    mas2[1][i] = mas2[1][i] + 1;
            }
        }
    // счетчик
     // исправно
            // вывод неповторяющихся элементов
            for (int j = 0; j < n; j++) {
                if (this->mas[j] != this->mas[j + 1])
                    cout << this->mas[j]<<" ";
                if (j == n)
                    cout << this->mas[j]<<" ";
            }
            cout << endl;
            // вывод счетчиков элементов,
            for (int j = 0; j < n; j++) {
                if (this->mas[j] != this->mas[j + 1])
                    cout << mas2[1][j]<<" ";
                if (j == n )
                 cout << mas2[1][j]<<" ";    
            }
 
             cout << endl;       
        for (int i = 0; i<2; i++)
            delete[] mas2[i];
        delete[] mas2;
 }
 
int main()
{   
    cout << "enter array size:";
    int nn;cin >> nn;
    delivery Z(nn);
    Z.enterarray();
    Z.displayarray();
    Z.count();
    Z.displayarray();
    system("pause");
    return 0;
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru