Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* W22 STATYCZNE DANE SKLADOWE
- Statyczne zmienne skladowe i statyczne metody sa wspoluzytkowane
- przez wszystkie egzemplarze obiektow klasy ( naleza do calej klasy,
- a nie tylko do pojedynczego obiektu ).
- dana statyczna to kompromis pomiedzy globalna a skladowa
- Przyklad W22:
- oblicza ile obiektow klasy zostalo utworzonych
- (modyfikacja statycznej zmiennej - static int ilosc),
- zmienia dzialanie zwyklej metody biegnij() - blokuje bieg psa
- poprzez prywatna zmienna statyczna - static int blokada
- i statyczna metode - static void przelacz()
- */
- #include "moj_iost.h"
- #include <string.h>
- class Pies
- {
- double wys;
- char imie[10];
- static int blokada; // prywatna zmienna statyczna
- public:
- int nr_start; // nr startowy psa
- static int ilosc; // publiczna zmienna statyczna
- static int daj_blokade(void)
- { // statyczny akcesor do prywatnej zmiennej statycznej
- return blokada;
- }
- static void przelacz(void) // statyczna funkcja w dla zmiennej statycznej
- { cout<< "Przelaczenie\n";
- blokada = ! blokada;
- }
- void biegnij(void);
- double daj_wys(void){return wys; };
- char * daj_imie(void){return imie; };
- Pies(const char * tekst, double h=0, int nr_start=-1 ){// konstruktor zliczajacy tworzone obiekty
- strcpy(imie,tekst);
- wys=h;
- if(h > 0)
- {
- ilosc++;
- }
- this->nr_start=nr_start;
- }
- ~Pies() { // destruktor cout << "Destructor " << imie<<" \n";
- if(wys > 0)
- {
- ilosc--; // zmnieszajacy jawnie iloscc obiektow
- }
- }
- void wyswietl()
- {
- cout << nr_start << " " << daj_imie() << " " << daj_wys() << "\n";
- }
- static void lista(int max_psow, Pies **list, char * komunikat)
- {
- cout << "Ilosc " << Pies::ilosc << " psow " << komunikat << "\n";
- cout << "Nr imie wys\n----------\n";
- for(int i = 0; i <= max_psow; i++)
- {
- if(list[i] == NULL) continue;
- list[i]->wyswietl();
- }
- cout << "\n";
- }
- };
- void Pies::biegnij(void) {
- cout<<"Pies " << imie ;
- if(!blokada) cout <<" >>>> Biegnie \n";
- else cout <<" !!!! Nie moge biegnac bo nie mam nog\n";
- }
- //Definicje i inicjalizacje zmiennych statycznych
- int Pies::blokada=1;
- int Pies::ilosc; // domyslnie inicjowana wart. zero
- static const char * ITEKST[20]={"Azor0","Asik1","Azax2","Bari3","Reks4",
- "Maks5","Hera6","Dona7","Figa8","Mona9"};
- int main()
- {
- int max_psow = 7;
- Pies *list[max_psow];
- for(int i = 0; i <= max_psow; i++)
- {
- list[i] = new Pies(ITEKST[i], 3*(10+i%6-1), 0);
- }
- Pies::lista(max_psow, list, "zgloszonych");
- int nrst = 100;
- for(int i = 0; i <= max_psow; i++)
- {
- if(list[i]->daj_wys() > 35)
- {
- cout << "niezakwalifikowany " << list[i]->daj_imie() << " wys. " << list[i]->daj_wys() << " > 35cm\n";
- delete list[i];
- list[i] = NULL;
- }
- else
- {
- list[i]->nr_start = nrst;
- nrst++;
- }
- }
- cout << "\n";
- Pies::lista(max_psow, list, "zakwalifikowanych");
- for(int i = 0; i <= max_psow; i++)
- {
- if(list[i] == NULL)
- {
- list[i] = new Pies("Spozniak", 32, nrst);
- break;
- }
- }
- Pies::lista(max_psow, list, "startujacych");
- stop();
- return 0;
- }
- /* Wyniki
- W22 STATYCZNE DANE SKLADOWE
- dane:ilosc,blokada i funkcje:przelacz,daj_blokade
- Poczatkowe wart. w klasie Pies:
- ilosc , blokada
- 0, 1
- Deklaracja i konstrukcja trzech obiektow
- Ilosc ( zm. statyczna ) kolejno widziana przez
- obiekty Azora, Asika i w klasie Pies
- 3, 3, 3
- Pies Azor !!!! Nie moge biegnac
- Przelaczenie
- blokada widziana przez Azora: 0
- Pies Azor >>>> Biegnie
- Pies Asik >>>> Biegnie
- Przelaczenie
- blokada widziana np przez Azorka 1
- blokada widziana np przez psy 1
- Pies Azor !!!! Nie moge biegnac
- Nacisnij Enter
- */
- /* --------- ZADANIE Z22a--- WYSCIGI PSOW ----------------------------------
- 1. Zmodyfikuj konstruktor dla psa domyslnie przyjmujacy wys=0, nr_start = -1
- i z inkrementowana iloscia dla wys wiekszej od 0.
- 2. Utworz psa sedziego o imieniu "Kalosz" i domyslnej wys. =0,
- ktory nie pozwieksza ilosci zawodnikow
- 3. Zdefiniuj na stercie (oper. new) tablice wskaznikow dla wszystkich
- zgloszonych do zawodow psow: pPies[i] dla i=0, ..., max_psow=7
- 4. Utworz tablice psow wprowadzajac konstruktorem obliczona wysokosc
- kazdego psa = 3*(10+i%6-1) i kopiujac imie z ponizszej tablicy
- static char * ITEKST[20]={"Azor0","Asik1","Azax2","Bari3","Reks4",
- "Maks5","Hera6","Dona7","Figa8","Mona9"};
- 5. Wydrukuj ilosc i tabele z naglowkiem "psow zgloszonych" np:
- cout << "\n Ilosc "<< ...ilosc... <<" psow zgloszonych: \n";
- cout << " Nr imie wys \n --------------------\n";
- 6. Utworz grupe startujacych psow, ktorych wysokosc jest mniejsza od 35 cm
- przydzielajac im kolejne nr_start od 100, usuwajac niezakwalifikowanych,
- aktualizujac ilosc startujacych i drukujac imie psa i przyczyne niezakwali-
- fikowania w postaci: cout << "\n niezakwalifikowany "<< ..imie... <<
- " wys. " << ...wys... << " > 35 cm ";
- 7. Wydrukuj zaktualizowana ilosc i tabele psow zakwalifikowanych:
- 8. Wprowadz na pierwsze wolne pole startowe nowego psa: "Spozniak" wys=20 cm
- z opisem cout << "\n Wprowadzenie spoznialskiego ";
- 9. Wydrukuj liste psow w tabeli z naglowkiem "psow startujacych"
- 10. Utworz funkcje drukujaca tabele psow wg pkt 5, 7 i 9 wolana w postaci:
- Pies::Wydruk(pPies, ... ) z odpowiednim aktualnym opisem (patrz przyklad )
- /* Zadanie 22b Napisz program, ktory obsluzy w tabeli obiekty
- w programie wg Zad15 i Zad16
- */
- /* =============== WYNIKI Zad Z22 WYSCIGI PSOW =======================
- Ilosc 8 psow zgloszonych
- Nr imie wys
- -----------------
- 0 Azor0 30
- 0 Asik1 33
- 0 Azax2 36
- 0 Bari3 39
- 0 Reks4 42
- 0 Maks5 45
- 0 Hera6 30
- 0 Dona7 30
- niezakwalifikowany Azax2 wys. 36
- niezakwalifikowany Bari3 wys. 39
- niezakwalifikowany Reks4 wys. 42
- niezakwalifikowany Maks5 wys. 45
- Ilosc 4 psow zakwalifikowanych
- Nr imie wys
- -----------------
- 100 Azor0 30
- 101 Asik1 33
- 102 Hera6 30
- 103 Dona7 33
- Wprowadzenie spoznialskiego
- Ilosc 5 psow startujacych
- Nr imie wys
- -----------------
- 100 Azor0 30
- 101 Asik1 33
- 104 Spozniak 32
- 102 Hera6 30
- 103 Dona7 33
- */
- /* Zadanie 22b Napisz program, ktory obsluzy w tabeli obiekty
- w programie wg Zad15 lub Zad16
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement