dzieki za odpowiedzi,
niestety dalej gdzies mam blad w kodziem, ktorego nie moge zlokalizowac. Mam program obslugujacy klase Tablice, ktora przechowuje dynamiczna tablice liczb double.
Obiekty sa grupowane w tablicy baza[10] , jest to tablica wskaznikow na obiekty klas. Niestety mam problem z wykonaniem dodania dwoch tablic, napisalem konsutrktor kopiujacy, przeciazylem operatory + i - , ale podczas dodawania nastepuje naruszenie pamieci, w wyniku tworzy sie wyzerowana tablica i jedna w ktorej nic nie ma. Czyli powstaja dwie, a powinna jedna wynikowa. Jakbyscie mogli zerknac:
case 5:
{
system("CLS");
cout << "Dodamy do siebie dwie pierwsze tablice i zapiszemy w nowej\n";
cout << "Uzywamy przeladowanego operatora '+'\n\n";
int rA = baza[0]->rozmiar();
int rB = baza[1]->rozmiar();
dodaj_tablice((rA > rB) ? rA : rB);
*baza[pnt-1] = *baza[0] + *baza[1];
break;
}
//********************************************************************************
void dodaj_tablice(int n)
{
int m = Tablica::ilosc;
baza[m] = new Tablica(n);
if(baza[m] == NULL) {cout << "\n\tBrak pamieci\n";}
}
//********************************************************************************
**//Konstruktory i Destruktor:**
//inicjalizowanie zmiennej statycznej klasy, licznika obiektow
//********************************************************************************
int Tablica::ilosc = 0;
//********************************************************************************
Tablica::Tablica()
{
ilosc++;
id = Tablica::ilosc;
nazwa = "Tablica";
nazwa += id;
}
//********************************************************************************
Tablica::Tablica(int rozmiar) : n(rozmiar)
{
ilosc++;
id = Tablica::ilosc;
tab = new double[n];
wyzeruj();
nazwa = "Tablica";
nazwa += id;
}
//********************************************************************************
Tablica::Tablica(int rozmiar, char *name) : n(rozmiar)
{
ilosc++;
id = Tablica::ilosc;
tab = new double[n];
wyzeruj();
nazwa = name;
}
//********************************************************************************
Tablica::Tablica(const Tablica& kTablica) : n(kTablica.n)
{
ilosc++;
// pobieramy rozmiar kopiowanej tablicy
tab = new double(n);
// kopiujemy tablice
memcpy(tab, kTablica.tab, n*sizeof(double));
srd = kTablica.srd;
id = Tablica::ilosc;
nazwa = "Tablica";
nazwa += id;
}
//********************************************************************************
Tablica::~Tablica()
{
cout << "\nDESTRUKOR: " << this->nazwa << endl ;
ilosc--;
delete[] tab;
tab = NULL;
}
//********************************************************************************
**// Przeciazone operatory::**
//********************************************************************************
Tablica Tablica::operator+(const Tablica& b)
{
int rB = b.rozmiar();
int rA = rozmiar();
int k = (rA > rB) ? rA : rB; //r --> rozmiar wiekszej z dodawanych tablic
Tablica temp(k);
for(int i=0; i<k ; i++)
{
temp.tab[i] = ((i >= rA) ? 0 : tab[i]) + ((i >= rB) ? 0 : b.tab[i]);
}
temp.srednia();
return temp;
}
//********************************************************************************
Tablica& Tablica::operator=(const Tablica& obiekt)
{
if(&obiekt == this) return *this;
if(obiekt.n != n)
{
delete[] tab;
n = obiekt.n;
tab = new double[n];
}
memcpy(tab, obiekt.tab, n*sizeof(double));
srd = obiekt.srd;
return *this;
}
//********************************************************************************
**tablica.h**
#include <string>
#pragma once
class Tablica
{
std::string nazwa;
double *tab;
double srd; //srednia elementow
int id;
int n; //rozmiar tablicy
public:
Tablica();
Tablica(int);
Tablica(int, char*);
Tablica(const Tablica&);
~Tablica();
void wypelnij();
void wyzeruj();
void wyswietl(int = 1, int = 0) const;
void insert_sort();
void srednia();
int rozmiar() const {return n;};
double* adres() const {return tab;};
size_t ilosc_bajtow() const;
static int ilosc; //licznik obiektow
static int str_lngt;
Tablica operator+(const Tablica&);
Tablica& operator=(const Tablica&);
};
Całe pliki:
plik main.cpp --> http://pastebin.com/0RLZnbKh
plik tablice.cpp --> http://pastebin.com/Z1JWiScY