Я тренирую свой C ++ и пытаюсь написать библиотеку, которая сможет представлять следующее число, используя связанные списки:
999999999 * ([i = 0] Σ [999999999] 1000000000 ^ i)
Например, если мой номер был 711381450277869054011 , он будет представлен следующим образом:
711 * 1000000000 ^ 2 + 381450277 * 1000000000 ^ 1 + 869054011 * 1000000000 ^ 0
Итак, вот структура моего LL и его функции:
typedef struct node* ll;
struct node
{
unsigned int data;
ll next;
};
bool insert(ll&, unsigned int);
// ...
void copy(ll&, ll);
void destroy(ll&);
А вот мой класс беззнаковых очень длинных целых чисел:
class uli
{
public:
uli();
~uli();
// <<, >>, =, operators...
uli& operator +=(const uli&);
uli& operator +=(char*);
const uli operator +(const uli&);
private:
ll head;
};
uli::uli()
{
head = NULL;
insert(head, 0);
}
uli::~uli()
{
destroy(head);
}
+ = оператор работает нормально, и я использую его для перегрузки оператора + .
Проблема в том, что я не могу заставить метод operator + () вернуть const uli без его разрушения деконструктором до того, как я его использую.
const uli uli::operator +(const uli& rarg) // rarg: right argument
{
uli larg; // left argument
larg = *this;
larg += rarg;
return larg;
}
// returns an LL to somewhere ???? larg was destroyed.
Теперь я не могу сделать Z = X + Y;