Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Определить оператор / 7 сообщений из 7, страница 1 из 1
30.11.2014, 12:54
    #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
30.11.2014, 21:12
    #38820859
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определить оператор
Creimi,

что конкретно не понятно?
...
Рейтинг: 0 / 0
01.12.2014, 00:43
    #38820941
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определить оператор
Сессия что ли началась?
...
Рейтинг: 0 / 0
01.12.2014, 01:14
    #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
01.12.2014, 01:40
    #38820956
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определить оператор
А разве переопределённая версия может содержать аргументы только встроенных типов?
...
Рейтинг: 0 / 0
01.12.2014, 01:42
    #38820958
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определить оператор
Basil A. SidorovА разве переопределённая версия может содержать аргументы только встроенных типов?
...
Рейтинг: 0 / 0
01.12.2014, 11:16
    #38821157
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определить оператор
CreimiAnatoly Moskovsky,
Так должно выглядеть?

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



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


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