#include <iostream>
#include <sstream>
using namespace std;
class TablicaD // klasa z tablica liczb typu DOUBLE
{
private:
int licznik; // deklaracja licznika elementow tablicy
int rozmiar; // deklaracja zmiennej uzywanej jako rozmiar tablicy dynamicznej
double *wtab; // deklaracja wskaznika do utworzenia tablicy dynamicznej
double srednia; // zmienna do przechowywanie sredniej wartosci elementow tablicy
char *wnazwa; // wskaznik do tablicy alokowanej dynamicznie z nazwa obiektu
public:
TablicaD(int n); // deklaracja konstruktora bez nazwy obiektu
TablicaD(int n, string tekst); // deklaracja konstruktora z nazwa obiektu jako drugi argument
TablicaD(const TablicaD &); // deklaracja konstruktora kopiujacego
~TablicaD(); // deklaracja destruktora
static int liczba_tablic; // zmienna statyczna, zawierajaca informacje o ilosci utworzonych obiektow klasy Tablica
string nazwa_obiektu; // zmienna przechowująca nazwe obiektu o strukturze: Obiekt_[nr obiektu].[wpisana przez uzytkownika nazwa]
// przeciazenia oparatorow:
TablicaD* operator+(const TablicaD &other) const;
TablicaD* operator-(const TablicaD &other) const;
TablicaD* operator/(const TablicaD &other) const;
TablicaD* operator*(const TablicaD &other) const;
//==================================================================================================
// FUNKCJE SKLADOWE
int size();
int ile_tablic();
void wypelnij();
//void wypelnij_nazwe();
//void wyswietl();
void zeruj();
void zapis_do_pliku();
void zapis_do_pliku_nowy(); // zapis do pliku strumieniowo uzywajac flag formatowania
void odczyt_z_pliku();
void dopisz(string tekst);
//funkcje sortujace
void sortuj_m();
void sortuj_r();
//funkcje zmienajace notacje
void szesnastkowo();
void naukowo();
void osemkowo();
//funkcja kontrolujaca prezycje
void precyzja(int pr);
//==================================================================================================
};
int TablicaD::liczba_tablic; // definicja zmiennej statycznej (domyslnie inicjalizowana zerem)
TablicaD::TablicaD(int n) // definicja funkcji konstruktora dla jednego argumentu: n - rozmiar tablicy
{
rozmiar = n;
wtab = new double[rozmiar]; // dynamiczna alokacja tablicy
cout << "Zostala utworzona tablica elementow double o rozmiarze: " << rozmiar << endl;
liczba_tablic++;
// alokacja pamieci na tablice z nazwa obiektu
wnazwa = new char[21];
//wypelnij_nazwe();
}
TablicaD::TablicaD(int n, string tekst) // definicja funkcji konstruktora dla 2 argumentow: n - rozmiar tablicy, tekst - nazwa obiektu
{
rozmiar = n;
wtab = new double[rozmiar]; // dynamiczna alokacja tablicy
cout << "Zostala utworzona tablica elementow double o rozmiarze: " << rozmiar << endl;
liczba_tablic++;
int ilosc = liczba_tablic;
ostringstream konwersja; // strumieniowa konwersja typu int na string
konwersja << ilosc;
string ilosc_string = konwersja.str();
nazwa_obiektu = "Obiekt_";
nazwa_obiektu = nazwa_obiektu + ilosc_string + "." + tekst;
cout << "Nazwa utworzonego obiektu: " << nazwa_obiektu << endl;
}
TablicaD::TablicaD(const TablicaD & wzor) : licznik(wzor.licznik), rozmiar(wzor.rozmiar), // definicja funkcji konstruktora kopiujacego
srednia(wzor.srednia), nazwa_obiektu(wzor.nazwa_obiektu)
{
cout << "\n********Dziala konstruktor kopiujacy **********\n";
wtab = new double[rozmiar];
for(int i=0; i<rozmiar; i++) // petla kopiujaca zawartosc tablicy do tablicy w nowym obiekcie
{
wtab[i] = wzor.wtab[i];
}
nazwa_obiektu += ".SKOPIOWANY";
}
TablicaD::~TablicaD(void) // definicja funkcji destruktora
{
cout << "Destruktor usuwa obiekt \n";
delete []wtab;
//delete []wnazwa;
wtab=0;
wnazwa =0;
liczba_tablic--;
}
int main()
{
TablicaD obiekt(10);
TablicaD obiekt_skopiowany = obiekt;
cout << "Nazwa skopiowanego obiektu: " << obiekt_skopiowany.nazwa_obiektu << endl;
cout << "Zawartosc tablicy w skopiowanym obiekcie: " << endl;
//obiekt_skopiowany.wyswietl();
return 0;
}