Coś się dalej sypie, oto kod, będę wdzięczny za jakieś porady. Program ma póki co dodawać dwie duże liczby.
BigNumber.h
#ifndef BIGNUMBER_H
#define BIGNUMBER_H
#include <iostream>
#include <vector>
class BNum
{
private:
int size;
public:
short* number;
BNum(int sz);
BNum(const BNum&);
~BNum();
friend BNum const operator + (const BNum& left, const BNum& right);
};
#endif // BIGNUMBER_H
BigNumber.cpp
#include "stdafx.h"
#include "BigNumber.h"
using namespace std;
BNum::BNum(int sz) : size(sz)
{
number = new short int [size];
printf("Utworzono nowy obiekt\n");
}
BNum::BNum(const BNum& bn) : number(bn.number)
{
number = bn.number;
}
BNum::~BNum()
{
delete [] number;
printf("Usunieto obiekt\n");
}
const BNum operator + (const BNum& left, const BNum& right)
{
vector<short> v;
short temp;
int sum, max;
if((sizeof(left.number)/sizeof(short)) <= (sizeof(right.number)/sizeof(short)))
max = sizeof(right.number)/sizeof(short);
else
max = sizeof(left.number)/sizeof(short);
v.push_back(0);
for(int i = 0; i < max; i++)
{
sum = left.number[i] + right.number[i];
v[i] += sum;
temp = static_cast<short>(v[i]/10);
v[i] = v[i] % 10;
v.push_back(temp);
}
BNum result(v.size());
for(int i = 0; i < v.size(); i++)
{
cout << v[i];
result.number[i] = v[i];
}
return result;
}
BigNum.cpp
#include "stdafx.h"
#include "BigNumber.h"
#include <string>
#include <cstdlib>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
string p, q;
vector<short> ps;
vector<short> qs;
cout << "Podaj pierwsza liczbe: " << endl;
cin >> p;
for( string::iterator i = p.begin(); i!=p.end(); i++ )
ps.push_back( *i - '0' );
cout << "druga liczbe liczbe: " << endl;
cin >> q;
for( string::iterator i = q.begin(); i!=q.end(); i++ )
qs.push_back( *i - '0' );
BNum pbn(p.size());
BNum qbn(q.size());
system("PAUSE");
for(int i = 0; i < p.size(); i++)
{
pbn.number[p.size() - i - 1] = p[i];
cout << pbn.number[p.size() - i - 1];
}
cout << endl;
for(int i = 0; i < q.size(); i++)
{
qbn.number[p.size() - i - 1] = q[i];
cout << pbn.number[p.size() - i - 1];
}
cout << endl;
system("PAUSE");
pbn = pbn + qbn;
system("PAUSE");
return 0;
}