Witam. Potrzebuje zrobić swoją klasę duże liczby i mam problem z operatorem wejścia. Próbuję stworzyć najprostszą wersje, gdzie jedna cyfra przechowywana jest w jednym charze (przez przeciążenie operatora+).
W klasie mam :
#ifndef DUZA_H
#define DUZA_H
//////////////////////////////////////////////////////////////////////
class DUZA
{
char* wartosc;
char znak;
unsigned int rozmiar;
public:
friend istream& operator>>(istream& s, DUZA& liczba);
friend ostream& operator<<(ostream& s, DUZA& liczba);
void operator+(char& cyfra);
DUZA();
~DUZA();
};
//////////////////////////////////////////////////////////////////////
DUZA::DUZA()
{
znak = ' ';
rozmiar = 0;
wartosc = 0;
}
//////////////////////////////////////////////////////////////////////
DUZA::~DUZA()
{
znak = ' ';
rozmiar = 0;
delete [] wartosc;
}
//////////////////////////////////////////////////////////////////////
void DUZA::operator+(char& cyfra)
{
if(rozmiar == 0)
{
wartosc = new char;
wartosc[0] = cyfra;
rozmiar = 1;
}
else
{
char* temp = new char[rozmiar+1];
int i;
for(i=0; i<rozmiar; i++)
temp[i] = wartosc[i]; //kopiowanie już zapisanych wartości
temp[i+1] = cyfra; //dodawanie nowej cyfry na koniec
delete wartosc;
wartosc = new char[rozmiar+1];
for(int j=0; j<rozmiar+1; j++) //przepisywanie powiększonej
wartosc[i] = temp[i]; //liczby do właściwej zmiennej w klasie
delete temp;
rozmiar++;
}
}
//////////////////////////////////////////////////////////////////////
#endif
Natomiast cyfry wczutyję z maina:
int main(int argc, char *argv[])
{
DUZA l;
cin >> l;
cout << l;
system("PAUSE");
return EXIT_SUCCESS;
}
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
ostream& operator<<(ostream& s, DUZA& liczba)
{
for(int i=0; i<liczba.rozmiar; i++)
s << liczba.wartosc[i];
}
//////////////////////////////////////////////////////////////////////
istream& operator>>(istream& s, DUZA& liczba)
{
char odp = 'y';
while(odp != 'e')
{
s >> odp;
if(odp != 'e') liczba.operator+(odp);
}
}
//////////////////////////////////////////////////////////////////////
Przy wypisywaniu rozmiar tablicy jest dobry ale zamiast cyfr są krzaki. A do tego po jakiejś 10 cyfrze program się zamyka. Prosiłbym o pomoc.