powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Определить оператор
7 сообщений из 7, страница 1 из 1
Определить оператор
    #38820628
Creimi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в общем в задании сказано,что нужно создать класс массив для хранения целых чисел. Два конструктора для заполнения случайными числами по размеру и через инициализационный список. Методы для определения размера и вывода массива на экран. Определить оператор вывода элемента по индексу. Определить оператор:*= умножение на число каждого элемента массива, если его четность совпадает с аргументом (например, arr *= 2 должно умножить на 2 только четные элементы, а arr *= 3 умножит на 3 только нечетные).
У меня есть выполненное задание для оператора:<< - прокрутка массива вправо на 4 позиций, а вот как сделать с умножение вообще не знаю. Очень нужна помощь.
array.h
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
#ifndef ARRAY_H
#define ARRAY_H
#include <algorithm>
 
using namespace std;
 
class Array
{
    int data[100];
    int m_size;
public:
    Array();
    Array(const Array &arr);
    Array(initializer_list<int> c);
    int size();
    void print();
    int operator[] (int idx);
    void operator>> (int t);
 
};
 
#endif // ARRAY_H



mstr.h
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
#ifndef MSTR_H
#define MSTR_H
 
/*
 * Пример класса строки.
 * Оператор >> ищет количество вхождений символа С
 */
 
#include <string>
using namespace std;
class MStr
{
    string str;
public:
    MStr(string s): str(s){}
    int operator >>(char c);
};
 
#endif // MSTR_H



array.cpp
Код: plaintext
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.
#include "array.h"
#include <algorithm>
#include <iostream>
 
Array::Array(){  //по-умолчанию массив пуст
    m_size = 0;
}
Array::Array(std::initializer_list<int> c){
    m_size = c.size();
    //копируем все значения из списка инициализации
    //в наш массив
    for_each(c.begin(), c.end(),
             //лямбда функция с захватом всего контекста
            [=] (int n) {
              static int idx = 0;
              data[idx++] = n;
            }
    );
}
int Array::size(){
    return m_size;
}
//возвращаем число из массива по индексу
int Array::operator[](int idx){
    return data[idx];
}
void Array::operator>>(int r)
{   //проворачиваем массив вправо на r позиций
    r %= m_size;
    r = m_size - r;
    int n = m_size;     //количество итераций
    int tmp = data[r];  //сохраняем начальный элемент
    int pos = r;        //начинаем с r-элемента
    while(n--){
        data[pos] = data[(pos+r) % m_size];
        pos+=r;
        pos%=m_size;
    }
    data[0] = tmp;      //кладем на место начальный элемент
}
 
void Array::print()
{   //выводим массив на экран
    for(int i = 0; i < m_size; i++){
        cout << data[i] << " ";
    }
    cout << endl;
}



mstr.h
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
#include "mstr.h"
#include <algorithm>
 
int MStr::operator >>(char c)
{
    int cnt = 0;
    for_each(str.begin(), str.end(), [&](char _){if(c == _) cnt++;});
    return cnt;
}



main.cpp
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
#include <iostream>
#include "array.h"
#include "mstr.h"
using namespace std;
 
int main()
{
  
    Array a({1, 2, 3, 4, 5, 6, 7});
 
    cout << "Элемент 5 = " << a[5] << endl;
 
    cout << "Массив а:" << endl;
    a.print();
    cout << "Прокрутим массив на 4 позиции:" << endl;
    a >> 4;
    a.print();
 
    MStr s("abababdsdfsasasdas");
    cout << (s >> 'a') << endl;
 
    return 0;
}
...
Рейтинг: 0 / 0
Определить оператор
    #38820859
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Creimi,

что конкретно не понятно?
...
Рейтинг: 0 / 0
Определить оператор
    #38820941
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сессия что ли началась?
...
Рейтинг: 0 / 0
Определить оператор
    #38820947
Creimi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Anatoly Moskovsky,
Так должно выглядеть?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
void Array::operator *=(int arg)
{
    len=m_size;
 if(arg%2)
 {
     for(int i=0; i<len; i++)
     {
         if (data[i]%2)
             data[i]*=arg;
         else
             continue;
     }
 }
 else
 {
     for(i=0;i<len;i++)
     {
         if(data[i]%2)
             continue;
         else
             data[i]*=arg;
     }
 }
}
...
Рейтинг: 0 / 0
Определить оператор
    #38820956
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А разве переопределённая версия может содержать аргументы только встроенных типов?
...
Рейтинг: 0 / 0
Определить оператор
    #38820958
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovА разве переопределённая версия может содержать аргументы только встроенных типов?
...
Рейтинг: 0 / 0
Определить оператор
    #38821157
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CreimiAnatoly Moskovsky,
Так должно выглядеть?

Код: plaintext
1.
void Array::operator *=(int arg)



Все операторы в С++ имеют значение , поэтому переопределённые операторы должны что-то возвращать.
Кроме того, некоторые операторы меняют значение в данном объекте, а некоторые -- нет.
Это дожно различаться по const/ не const.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Определить оператор
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]