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

Перегрузка оператора + и = - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Инициализация строки в заголовочном файле http://www.cyberforum.ru/cpp-beginners/thread813505.html
Работа с файлом настроек. Чтобы не вводить строки в разных метах программы и не плодить define (следуя рекомендациям Б.Страуструпа), есть желание проинициализировать строку в заголовочном файле одного из классов. И заодно присвоить ее или же указатель на нее другой переменной. Образно говоря, хочется чего-то в духе class A { private: static const char Group1Name = "Group1"; static const...
C++ Как убрать округление Ребят не подскажите как убрать округление? Например когда я ввожу 55555555555555555555, то он должен взять просто первые 16 символов, а он берет 15 и последний округляет. Так вот как от этого избавиться? http://www.cyberforum.ru/cpp-beginners/thread813496.html
Составить алгоритм и написать программу C++
Составить алгоритм и написать программу на языке С++. Ребят, очень важно, если сдам этот зачет, то не вылечу из инста! помогите пожалуйста!!! Составить алгоритм и написать программу на языке С++ Дан массив а, состоящий из N элементов. Вставить число P между теми числами, которые образуют пару с одинаковыми знаками. Удалить из массива все числа, составленные из одинаковых цифр.
C++ Бинарное дерево, поиск пирамиды
Помогите написать программу: Дано бинарное дерево. Определить какие поддеревья являются пирамидами. Принцип задания понимаю, но как реализовать не представляю.
C++ Исправить ошибку в программе http://www.cyberforum.ru/cpp-beginners/thread813478.html
не могу сдать зачет((( в С++ полный ноль((( надеюсь на ваше понимание.. Укажите и исправьте ошибку в программе. Полагайте, что int *zPtr; //zPtr будет ссылаться на массив z int *aPtr = NULL; void *sPtr = NULL; int number, i; int z = {1, 2, 3, 4, 5}; sPtr = z
C++ Массив произвольной размерности и работа с ним Доброго времени суток. Появилась интересная задача: создать функцию для создания массива, размерность которого укажут в ходе программы(то есть не a и n укажут-а а..., и q1,q2... укажут, как и количество этих q, уже в процессе выполнения программы) и поменять местами первый с последним, второй с предпоследним и так далее элементы. Вопрос в следующем: как, собственно, создать такой массив, как... подробнее

Показать сообщение отдельно
eocron
Кактус
 Аватар для eocron
66 / 66 / 6
Регистрация: 23.05.2012
Сообщений: 343
20.03.2013, 12:12     Перегрузка оператора + и =
Здравствуйте! Возникла проблема при реализации кода перегрузки операторов. BigInt - это просто класс характеризующий огромные числа в длинной арифметике. В массиве digits, вот такая запись 000123 будет хранится как 321000. Цель: заставить работать вот такое
a=a+b,
или хотя бы вот такое
c=a+b.

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
#include <iostream>
#include <string>
 
using namespace std;
 
class BigInt
{
        static const int max_size = 10000;
        char *digits;
public:
          int amount;
          BigInt():amount(0),digits(0)
          {
                   digits=(char *)malloc(sizeof(char)*max_size);
          }
          ~BigInt()
          {
                   free(digits);
          }
          
          friend ostream &operator<<(ostream& output, BigInt& a)
          {
                  a.output(output);
                  return output;
          }
          
          friend istream &operator>>(istream& input, BigInt& a)
          {
                  a.input(input);
                  return input;
          }
          friend BigInt operator+(const BigInt &a, const BigInt &b)
          {
                  BigInt res;
                  res.amount = max(a.amount,b.amount);
                  int r = 0;
                  for (int i=0;i<res.amount | r;i++)
                  {
                        res.digits[i] = a.digits[i] + b.digits[i] + r;
                        if (res.digits[i]>=10)
                        {
                              res.digits[i]-=10;
                              r = 1;
                        }
                        else
                        {
                              r = 0;
                        }
                  }
                  if (res.digits[res.amount])
                  {
                     res.amount++; 
                  }
                  return res;
          }
          BigInt & operator=(BigInt& other)
          {
                 if(this != &other)
                 {
                         memset(digits,0,max_size);
                         amount = other.amount;
                         for(int i=0;i < other.amount;i++)
                         {
                                 digits[i] = other.digits[i];
                         }
                 }
                 return *this;
          }
private: 
          void input(istream& input)
          {
                  memset(digits,0,max_size);
                  string str;
                  input>>str;
                  int pos = 0;
                  for(int i=str.size()-1 ; i>=0 ; i--)
                  {
                      digits[pos++] = str[i] - '0';//Гў îáðГ*ГІГ*îì ïîðÿäêå, äëÿ óäîáñòâГ*
                  }
                  amount = str.size();
          }
          void output(ostream& output)
          {
                      for(int i=amount - 1;i >= 0;i--)
                      {
                              output<<(int)digits[i];
                      }
          }
};
 
int main()
{
    BigInt a;
    BigInt b;
    BigInt c;
    cin>>a;
    cin>>b;
    a+b+a; // работает, проверено
    c=a+b; //не работает, так как локальная переменная возвращаемая при a+b уничтожается.....как решить проблему? при & компилятор ругается на локальность.
    cout<<c<<endl;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 20:03. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru