logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[C++] Kontener z metodami zapisz/przywróć i licznik obiektów – jak zaimplementować?

ad_min 15 Maj 2006 00:26 1079 5
REKLAMA
  • #1 2626263
    ad_min
    Poziom 12  
    Posty: 57
    Pomógł: 2
    Ocena: 2
    Mam zrobić bibliotekę obsługującą obiekty trwałe...dla mniej wtajemniczonych (np. dla mnie...;) ) -> chodzi tu o to, ze mam zbudować kontener, ktory bedzie miał metodę zapisz i przywróc ,które to odpowiednio zapisują zawartość wszystkich składowych do pliku i w razie potrzeby odczytac i przypisać spowrotem odpowiednie dane...
    Z tego co się dowiedziałem, to owy kontener powinien wymuszać na obiektach, na których takie sztuki ma wyczyniać, aby te miały jakąś metodę zapisującą i odczytującą...powinien tez byc jakiś globalny? (albo jakiś składowy odpowiednich klas) licznik obiektów, dzieki któremu, bedzie wiadomo, który obiekt został wczesniej zapisany, i do ktorego bedzie mozna przywrócic dane....

    Czy ktoś robił kiedys cos podobnego, lub ma jakies pomysły, wskazówki, sugestie??
    Za wszelką pomoc bede wdzięczny...

    Pozdrawiam
  • REKLAMA
  • #2 2628530
    ad_min
    Poziom 12  
    Posty: 57
    Pomógł: 2
    Ocena: 2
    hmm...to moze sprecyzuję troche bardziej moje pytanie...

    Jak mozna wymusić na obiekcie, który będzie w tym kontenerze, aby miał metodę, która odpowiada za zapis i odczyt danych??
  • REKLAMA
  • #3 2628771
    Faust
    Poziom 17  
    Posty: 135
    Pomógł: 22
    Ocena: 4
    Pewnie to nie rozwiązanie, ale możesz zrobić tak jak się robi podobne rzeczy w Javie. Czyli obiekty, na których kontener miałby pracować musiałyby dziedziczyć, bo jakiejś twojej klasie abstrakcyjnej z tą metodą. Zadaniem użytkownika byłoby odziedziczyć odpowiednie metody od twojej klasy bazowej i je przeciążyć.
  • REKLAMA
  • #4 2629582
    ad_min
    Poziom 12  
    Posty: 57
    Pomógł: 2
    Ocena: 2
    hmm....no niby racja.......no dobrze.....a jak teraz mógłbym wymusić, aby obiekty "wkładane" do kontenera miały być odpowiedniego typu (czyli typu klasy, która dziedziczy po tej mojej wczesniej ustalonej?)......

    a....oczywiscie, czekam jeszcze na jakies propozycje (kazda się przyda...;))

    Dzieki za odpowiedz
  • REKLAMA
  • #5 2632184
    Faust
    Poziom 17  
    Posty: 135
    Pomógł: 22
    Ocena: 4
    To może z innej beczki:
    
    #include<windows.h>
    #include<iostream>
    
    using namespace std;
    
    class obiekt
    {
    public:
    	obiekt(int liczba)
    	{
    		this->liczba=liczba;
    	}
    	void Zapisz()
    	{
    		cout << "Zostala wywolana metoda Zapisz dla obiektu z liczba: "<< liczba << endl;
    	}
    private:
    	int liczba;
    };
    
    template<typename typ>
    class kontener
    {
    public:
    	kontener();
    	void dodaj(typ element);
    	void usun(int index);
    	void zapisz();
    	int romiar();
    protected:
    	int ilosc;
    	typ **tab1,**tab2;
    };
    
    template<typename typ>kontener<typ>::kontener()
    {
    	tab1=0;
    	tab2=0;
    	ilosc=0;
    }
    
    template<typename typ>void kontener<typ>::dodaj(typ element)
    {
    	if(ilosc==0)
    	{
    		tab1=new typ*[++ilosc];
    		tab1[0]=new typ(element);
    	}
    	else
    	{
    		tab2=new typ*[ilosc+1];
    		for(int i=0;i<ilosc;i++)
    			tab2[i]=tab1[i];
    		tab2[ilosc]=new typ(element);
    		delete []tab1;
    		tab1=tab2;
    		tab2=0;
    		ilosc++;
    	}
    }
    template<typename typ>int kontener<typ>::romiar()
    {
    	return ilosc;
    }
    template<typename typ>void kontener<typ>::zapisz()
    {
    	for(int i=0;i<ilosc;i++)
    		tab1[i]->Zapisz();
    }
    int main() 
    { 
    	obiekt testowy1(0),testowy2(1);
    	kontener<obiekt> kont;
    	kont.dodaj(testowy1);
    	kont.dodaj(testowy2);
    	kont.zapisz();
    	system("pause");
    }
    

    Powyższy kod nie skompiluje się jeżeli klasa obiekt nie będzie miała metody zapisz. Każda klasa podstawiona, do wzorca, musi mieć zdefiniowaną taką metodę, bo inaczej program się nie skompiluje.
  • #6 2633278
    ad_min
    Poziom 12  
    Posty: 57
    Pomógł: 2
    Ocena: 2
    hmmm...a to nie myslałem, ze to az tak prosto mozna zrobić......i nawet bez dziedziczenia...hmm....dzieki wielkie za pomysł.....
    oczywiscie czekam na dalsze propozycje...;)...
    Pozdrawiam
REKLAMA