Darmowe Forum
Grudzieñ 30, 2024, 18:00:08 *
Witamy, Go¶æ. Zaloguj siê lub zarejestruj.
Czy dotar³ do Ciebie email aktywacyjny?

Zaloguj siê podaj±c nazwê u¿ytkownika, has³o i d³ugo¶æ sesji
Aktualno¶ci: Forum zosta³o uruchomione!
 
   Strona g³ówna   Pomoc Zaloguj siê Rejestracja  
Strony: [1]
  Drukuj  
Autor W±tek: Zmienne statyczne  (Przeczytany 3545 razy)
admin
Administrator
Ekspert
*****
Wiadomo¶ci: 821


Email
« : 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;
}
« Ostatnia zmiana: Kwiecieñ 04, 2013, 07:11:39 wys³ane przez admin » Zapisane
admin
Administrator
Ekspert
*****
Wiadomo¶ci: 821


Email
« Odpowiedz #1 : 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;
}

« Ostatnia zmiana: Kwiecieñ 04, 2013, 10:28:57 wys³ane przez admin » Zapisane
admin
Administrator
Ekspert
*****
Wiadomo¶ci: 821


Email
« Odpowiedz #2 : 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
}
Zapisane
admin
Administrator
Ekspert
*****
Wiadomo¶ci: 821


Email
« Odpowiedz #3 : 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;
}
Zapisane
admin
Administrator
Ekspert
*****
Wiadomo¶ci: 821


Email
« Odpowiedz #4 : 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;
}
Zapisane
admin
Administrator
Ekspert
*****
Wiadomo¶ci: 821


Email
« Odpowiedz #5 : 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;
}
Zapisane
Strony: [1]
  Drukuj  
 
Skocz do:  

Powered by SMF 1.1.11 | SMF © 2006-2008, Simple Machines LLC | Sitemap

Polityka cookies
Darmowe Fora | Darmowe Forum

moikrewni zlotasiodemka proskills polski-serwer-rpg blackmoon