Witam, mam problem z implementacją w mojej klasie reprezentującej wektory, funkcji push.Back( ), dodającej na końcu wektora kopię przekazanego argument. Funkcja dodaje na koncu tablicy element ale nie taki jak oczekuje (tzn. 3.4564e+674 itp...) Oto kod:
#include<iostream>
using namespace std;
class doublevector
{
public:
doublevector( );
doublevector( int liczba_elementow );
doublevector(const doublevector& obiekt);
~doublevector( );
void push_Back(double element);
bool operator ==(doublevector& obiekt);
void operator =(const doublevector& obiekt);
friend istream& operator >>(istream& dane_wej,
const doublevector& obiekt);
friend ostream& operator <<(ostream& dane_wyj,
const doublevector& obiekt);
private:
int liczba_elementow;
double *wartosc;
};
int main( )
{
doublevector wektor(5), wektor2(1);
double element;
cout << "Podaj dowolny ciag znakow: \n";
cin >> wektor;
cout << "Podaj element, ktory chcesz dodac: \n";
cin >> element;
wektor.push_Back(element);
cout << "Oto twoje dane : " << endl << wektor << endl;
system("pause");
return 0;
}
doublevector::doublevector( ) : liczba_elementow(50)
{
wartosc = new double[liczba_elementow + 1];
wartosc[0] = '\0';
cout << "Witam, z kontruktora domyslnego : ) \n";
}
doublevector::doublevector(const doublevector& obiekt) :liczba_elementow(obiekt.liczba_elementow)
{
wartosc = new double[liczba_elementow + 1]; //+1 jest na '\0'.
for (int j = 0; j < obiekt.liczba_elementow; j++)
{
wartosc[j] = obiekt.wartosc[j];
}
wartosc[liczba_elementow] = '\0';
}
doublevector::doublevector(int rozmiar) : liczba_elementow(rozmiar)
{
wartosc = new double[liczba_elementow + 1];
wartosc[0] = '\0';
}
doublevector::~doublevector( )
{
delete [] wartosc;
}
istream& operator >>(istream& dane_wej, const doublevector& obiekt)
{
for (int i = 0; i < obiekt.liczba_elementow; i++)
dane_wej >> obiekt.wartosc[i];
return dane_wej;
}
ostream& operator <<(ostream& dane_wyj, const doublevector& obiekt)
{
for (int i = 0; i < obiekt.liczba_elementow; i++)
dane_wyj << obiekt.wartosc[i] << " ";
return dane_wyj;
}
bool doublevector::operator ==(doublevector& obiekt)
{
int licznik = 0;
for (int j = 0; j < obiekt.liczba_elementow; j++)
{
if (wartosc[j] == obiekt.wartosc[j])
licznik++;
}
return (licznik >= obiekt.liczba_elementow);
}
void doublevector::operator =(const doublevector& obiekt)
{
int nowa_dlugosc = obiekt.liczba_elementow;
if (nowa_dlugosc > liczba_elementow)
{
delete [] wartosc;
liczba_elementow = nowa_dlugosc;
wartosc = new double[liczba_elementow + 1];
}
for (int j = 0; j < obiekt.liczba_elementow; j++)
{
wartosc[j] = obiekt.wartosc[j];
wartosc[nowa_dlugosc] = '\0';
}
}
void doublevector::push_Back(double element)
{
liczba_elementow = liczba_elementow + 1;
wartosc[liczba_elementow] = element;
}