Форум программистов, компьютерный форум, киберфорум
Наши страницы

Класс очень большого числа. Перегрузка operator++ - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ на С++. Не могу сделать.Не очень поняла тему классы http://www.cyberforum.ru/cpp-beginners/thread798677.html
Визначити тип Date як клас, що містить: - закриті поля цілого типу з інформацією про день, місяць та рік; - три конструктори - умовчання з використанням поточної дати, конструктор з трьома...
C++ Массив и Удаление элементов вектора 1)Найти произведение элементов, расположенных между первым и вторым нулевым элементами. 2)Удалить из массива элемент, расположенный после каждого значения, равного максимальному элементу. ... http://www.cyberforum.ru/cpp-beginners/thread798669.html
Замена нескольких пробелов одним C++
Народ, нужна ваша высококвалифицированная помощь. Нужно: написать функцию, в которую передаётся символьный массив со строкой и которая преобразует эту строку, заменяя несколько подряд идущих...
Дружественный класс C++
#include <iostream> class X { friend class Y; int a; int b; int y; int getA() {return this->a;} int getB()
C++ Палиндром http://www.cyberforum.ru/cpp-beginners/thread798650.html
Здравствуйте. Пытаюсь написать программу которая проверяет является ли введёное число с клавиатуры палиндромом. Метод проверки тривиален - схема Горнера. Программа работает не с самим числом, а...
C++ Задача Популяция Ни для кого не секрет, что студенты ОНУ больше всех любят биологию. Но мало кто знает, что именно студент кафедры Увеселительной Теории Василий Простонародьев вывел новую разновидность саранчи –... подробнее

Показать сообщение отдельно
Рыжий Лис
Просто Лис
347 / 272 / 80
Регистрация: 17.05.2012
Сообщений: 1,116
Записей в блоге: 4

Класс очень большого числа. Перегрузка operator++ - C++

02.03.2013, 17:11. Просмотров 431. Ответов 4
Метки (Все метки)

Число хранится в массиве. Не могу сделать перегрузку ++. Помогите.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
byte* massiv;
massiv = new byte[96];
 
Big* operator++()
  { a++;
    //??????????????????????????????
    if (massiv[0]==255)
    { massiv[1]++;
      //а дальше как???
    }
    massiv[0]++;
    return this;
  }
Весь код
Кликните здесь для просмотра всего текста
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
#include <stdio.h>
#include <windows.h>
#define null '\0'
#define byte unsigned char
 
const int size=96;
 
class Big
{
private:
  byte* massiv;
  int a;
 
public:
  Big()
  { a=0;
    massiv = new byte[size];
    for (int i=0; i<size; i++)
    { massiv[i]=0;
    }
  }
  ~Big()
  { delete massiv;
  }
  void print()
  { printf("%i",a);
    for (int i=0; i<size; ++i)
    { if (i%8==0)
        printf(" ");
      if (i%16==0)
        printf("\n");
      if (massiv[i]<16)
        printf("0");
      printf("%X ", massiv[i]);
    }
    printf("\n");
  }
  Big* operator++()
  { a++;
    //??????????????????????????????
    if (massiv[0]==255)
    { massiv[1]++;
      //а дальше как???
 
    }
 
    massiv[0]++;
 
    return this;
  }
};
 
int main()
{ Big a;
  a.print();
  for (int i=0; i<258; i++)
  { ++a;
    a.print();
  }
}

Есть идея, сделать рекурсивную функцию, в нее передавать индекс элемента, а внутри проверять условие massiv[i]==255, если нет выходим из рекурсии. Не знаю как реализовать.

Помогите, пишите свои идеи.

Добавлено через 32 минуты
Написал с рекурсией, вроде работает
Кликните здесь для просмотра всего текста
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
#include <stdio.h>
#include <windows.h>
#define null '\0'
#define byte unsigned char
 
const int size=32;
 
class Big
{
private:
  byte* massiv;
 
public:
  Big()
  { massiv = new byte[size];
    for (int i=0; i<size; i++)
      massiv[i]=0;
  }
  ~Big()
  { delete massiv;
  }
  void print()
  { for (int i=0; i<size; ++i)
    { if (i%8==0)
        printf(" ");
      if (i%16==0)
        printf("\n");
      if (massiv[i]<16)
        printf("0");
      printf("%X ", massiv[i]);
    }
    printf("\n");
  }
  Big* operator++()
  { plus(0);
    return this;
  }
  void plus(int i)//Рекурсия
  { if (massiv[i]==255)
      plus(i+1);
    massiv[i]++;
  }
};
 
int main()
{ Big a;
  a.print();
  for (int i=0; i<65540; i++)
  { ++a;
    a.print();
  }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru