Tytuł: Zmienne statyczne Wiadomość wysłana przez: admin Kwiecień 04, 2013, 07:08:28 Modyfikator static sprawia, Âże obiekt w danej funkcji jest umieszczany w tej samej pamiĂŞci, co zmienna globalna i nie jest usuwany wraz z zakoĂączeniem funkcji.
int licznik() { static int a; a++; return a; } int main() { cout<<"Wywoluje funkcje licznik"<<licznik(); cout<<"\n...drugi raz "<< licznik(); } Zmienna statyczna nawet lokalna nie jest usuwana. BĂŞdzie caÂły czas pamiĂŞtaÂła swojÂą poprzedniÂą wartoœÌ. PorĂłwnaj jak dziaÂła zmienna statyczna i dynamiczna #include <cstdlib> #include <iostream> using namespace std; class drzewo {public: virtual void pien(){cout<<"drzewo"<<endl;}}; class krzaczek :public drzewo {public: void pien(){cout<<"krzaczek"<<endl;}}; int licznik(){static int a; a++; return a;}; int licznik1(){int b; b++; return b;} int main(int argc, char *argv[]) { cout<<"Wywolanie funkcji licznik "<<licznik()<<endl; cout<<"Wywolanie drugi raz funkcji licznik "<<licznik()<<endl; cout<<"Wywolanie funkcji licznik1 "<<licznik1()<<endl; cout<<"Wywolanie drugi raz funkcji licznik1 "<<licznik1()<<endl; system("PAUSE"); return EXIT_SUCCESS; } Tytuł: Odp: Zmienne statyczne Wiadomość wysłana przez: admin Kwiecień 04, 2013, 07:09:27 Zmienne statyczne w klasach.
Statyczne pola klasy definiuje sie podobnie do zmiennych lokalnych, poprzez uÂżycie sÂłowa kluczowego static: class samochod { private: // dane opisujace samochĂłd public: static int predkosc; }; int samochod::predkosc; Podobnie jak zmienna statyczna lokalna, statyczne pole klasy jest tworzone tylko raz, w tym samym obszarze co zmienne globalne i caÂły czas pamiĂŞta swojÂą ostatniÂą wartoœÌ. Pole statyczne jest tworzone zanim zostanie utworzony pierwszy obiekt danej klasy. Zazwyczaj - tworzone sÂą juÂż na samym starcie programu. Tak jak zmienna lokalna pamiĂŞta swojÂą wartoœÌ pomiĂŞdzy kolejnymi wywoÂłaniami, tak pole statyczne klasy pamiĂŞta swojÂą wartoœÌ "pomiĂŞdzy obiektami". Nie waÂżne z jakiego obiektu siĂŞ do niego odwoÂłasz, wartoœÌ bĂŞdzie ta sama, wspĂłlna dla wszystkich obiektĂłw. samochod ford, fiat, volvo; //stworzenie 3 obiektow fiat.predkosc = 100; cout << ford.predkosc << endl; //wypisze 100 volvo.predkosc = 120; cout << fiat.predkosc << endl; //wypisze 120 /////////////////////// ---CaÂły program---//////////////////////////////////////////////////////////////// #include <cstdlib> #include <iostream> using namespace std; class samochod { public: static int predkosc; }; int samochod::predkosc; int main(int argc, char *argv[]) { samochod ford, fiat, volvo; fiat.predkosc=100; cout<<"ford "<<ford.predkosc<<endl; volvo.predkosc=120; cout<<"fiat "<<fiat.predkosc<<endl; system("PAUSE"); return EXIT_SUCCESS; } ///////////////////-- kolejny program pokazujÂący ,Âże statyczne zmienne dziaÂłajÂą tylko dla potomkĂłw tylko tej samej klasy --////////////////////////// #include <cstdlib> #include <iostream> using namespace std; class samochod { public: static int predkosc; }; int samochod::predkosc; class motor { public: static int predkosc; }; int motor::predkosc; int main(int argc, char *argv[]) { samochod ford, fiat, volvo; motor nsu, bmw, yamaha; fiat.predkosc=100; cout<<"ford "<<ford.predkosc<<endl; cout<<"nsu "<<nsu.predkosc<<endl; volvo.predkosc=120; cout<<"fiat "<<fiat.predkosc<<endl; system("PAUSE"); return EXIT_SUCCESS; } //////////////////////////////////////////////////////////////////////////////////////////////////////////// #include <cstdlib> #include <iostream> using namespace std; class samochod {public: static int predkosc; public: samochod(){}; ~samochod(){};}; class motor { public: static int predkosc; }; class scigacz : public motor {}; int motor::predkosc; int samochod::predkosc; int main(int argc, char *argv[]) { samochod fiat,opel,renault; motor kawasaki, honda; scigacz suzuki; suzuki.predkosc=250; cout<<endl<<suzuki.predkosc; kawasaki.predkosc=200; cout<<endl<<suzuki.predkosc; fiat.predkosc=170; cout<<endl<<"max predkosc fiat= "<<fiat.predkosc<<endl; opel.predkosc=210; cout<<endl<<"max predkosc opel= "<<opel.predkosc<<endl; renault.predkosc=70; cout<<endl<<"max predkosc renault= "<<renault.predkosc<<endl; cout<<endl<<"max predkosc fiat= "<<fiat.predkosc<<endl; system("PAUSE"); return EXIT_SUCCESS; } Tytuł: Odp: Zmienne statyczne Wiadomość wysłana przez: admin Kwiecień 04, 2013, 07:10:48 Metody statyczne
Metody statyczne klasy to metody, ktĂłre sÂą uruchamiane w kontekÂście danej klasy, tak jak zwykÂłe metody sÂą uruchamiane w kontekÂście konkretnego obiektu. Oznacza to, Âże o ile zwykÂłe metody potrzebujÂą obiektu do prawidÂłowego dziaÂłania, to metody statyczne - moÂżna wywoÂłaĂŚ bez podawania jakiegokolwiek obiektu. Ma to jednak swojÂą cenĂŞ - metody statyczne majÂą dostĂŞp jedynie do innych zmiennych statycznych i metod statycznych tej klasy. //.... class rysio { private: int a, b; static int c; public: static void dzialaj() { c=10; // b=10; - b³¹d! 'b' nie jest statyczne! nie ma do niego dostĂŞpu // this->a = 10; - b³¹d!! w metodach statycznych 'this' nie istnieje!! } this - w C++, sÂłowo kluczowe odnoszÂące siĂŞ w niestatycznych metodach klasy do obiektu na rzecz ktĂłrego dana metoda zostaÂła wywoÂłana. Do obiektĂłw odwoÂłujemy siĂŞ poprzez kropkĂŞ lub poprzez -> np.: class Punkt { int x; int y; public: int kolor; void pozx(int xx){x=xx;} void pozy(int y){y=yy;} void kolor(int kk){kolor=kk;} }; main(void) { Punkt p1; //obiekt stworzony statycznie p1.kolor=10; //odwoÂłanie do pola przez kropkĂŞ p1.pozx(20); //odwoÂłanie do funkcji przez kropkĂŞ Punkt *wsk; //wsk - wskaznik na obiekt klasy TPunkt wsk = new Punkt; //operator new wsk->kolor=10; //odwoÂłanie do pola przez -> wsk->pozx(20); //odwoÂłanie do funkcji przez -> delete wsk; //operator delete } Tytuł: Odp: Zmienne statyczne Wiadomość wysłana przez: admin Kwiecień 10, 2013, 09:08:06 #include <cstdlib>
#include <iostream> class samochod {public: float predkosc(float b){return (b/1.6);}; }; using namespace std; int main(int argc, char *argv[]) {samochod astra, insignia; float d=10; for(;d!=0;){ cout<<"Podaj prĂŞdkoÂśc astry: ";cin>> d; float b=astra.predkosc(d); cout<<" podana predkosc astry to: "<< b<<" mil"<<endl;}; system("PAUSE"); return EXIT_SUCCESS; } Tytuł: Odp: Zmienne statyczne Wiadomość wysłana przez: admin Kwiecień 10, 2013, 09:24:24 #include <cstdlib>
#include <iostream> class samochod {public: float predkosc(float b){return (b/1.6);}; }; using namespace std; int main(int argc, char *argv[]) {samochod astra, insignia; float d=10, e=10; for(;(d!=0)&&(e!=0) ; ){ cout<<endl<<"Podaj predkoÂśc astry: ";cin>> d; cout<<endl<<"Podaj predkoÂśc insigni: ";cin>> e; float b=astra.predkosc(d); float a=astra.predkosc(e); cout<<endl<<" podana predkosc astry to: "<< b<<" mil"<<endl; cout<<endl<<" podana predkosc insigni to: "<< a<<" mil"<<endl;}; system("PAUSE"); return EXIT_SUCCESS; } Tytuł: Odp: Zmienne statyczne Wiadomość wysłana przez: admin Kwiecień 12, 2013, 11:52:01 #include <cstdlib>
#include <iostream> using namespace std; bool rown(int x, int y) { return (x == y); } int main(int argc, char *argv[]) {cout << "Podaj 1 liczbe: "; int x; cin >> x; cout << "Podaj 2 liczbe: "; int y; cin >> y; bool czyr = rown(x, y); if (czyr) cout << x << " i " << y << " jest rĂłwnne"<<endl; else cout << x << " i " << y << " nie jest rĂłwne"<<endl; system("PAUSE"); return EXIT_SUCCESS; } |