Static const volatile
This presentation is the property of its rightful owner.
Sponsored Links
1 / 14

static, const, volatile PowerPoint PPT Presentation


  • 71 Views
  • Uploaded on
  • Presentation posted in: General

static, const, volatile. Static – zmienne klasowe. zmienna klasowa o atrybucie static jest wspólna dla wszystkich obiektów danej klasy istnieje nawet gdy nie ma żadnego obiektu można się do niej odwoływać za pomocą operatora zakresu. class ST {

Download Presentation

static, const, volatile

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Static const volatile

static, const, volatile


Static zmienne klasowe

Static – zmienne klasowe

  • zmienna klasowa o atrybucie static jest wspólna dla wszystkich obiektów danej klasy

  • istnieje nawet gdy nie ma żadnego obiektu

  • można się do niej odwoływać za pomocą operatora zakresu


Static const volatile

class ST

{

static int s; // to jest tylko deklaracja

int i;

public:

static int ps; // jak wyżej

};

int ST::s=0, // to definicja

ST::ps=0;

  • deklaruje się w klasie, ale definiuje (już bez słowa kluczowego static) poza klasą

  • można zdefiniować tylko raz

  • dla bibliotek: definicje do *.cpp a dekl. klasy do *.h (nie trzeba i nie mozna dodatkowych extern ST::s)


Static metody

Static – metody

  • mogą wtedy być wołane, nawet gdy nie ma obiektów (za pomocą operatora zakresu)

  • mogą korzystać jedynie ze statycznych pól i metod klasy

  • nie ma wskaźnika this


Static metody1

class ST

{

static int s;

int i;

public:

static int ps;

ST(int i=0)

:i(i)

{

s++;

}

static void ile_nas()

{

cout << s << "\n";

}

void wszystko()

// nie wolno static !!!

{

cout << s << " " << i

cout << " " << ps << "\n";

}

};

Static – metody


Static const volatile

void main()

{

int i;

// i=s; // nie ma ::s ani ::ps

// i=ps;

// i=ST::s; // private

i=ST::ps;

ST::ile_nas();

// ST::wszystko(); // niestatyczna metoda klasy

ST a;

ST::ile_nas();

a.ile_nas();

a.wszystko();

}


Const volatile

const, volatile

  • const --- stałe

    const int ci =7;

  • volatile --- ulotne

    volatile int vi=8;

    i++;

    i--;

    i=i+0;


Const volatile1

const, volatile

  • obiekty również mogą być stałe bądź ulotne

  • na rzecz obiektów stałych bądź ulotnyvh można aktywować jedynie metody uprzywilejowane

  • metody uprzywilejowane definiujemy podając po nawiasie zamykającym listę argumentów słowa kluczowe const i/lub volatile.

  • UWAGA: uprzywilejowanie metody może powodować jej przeciążenie:

    int f(); int f() const;


Static const volatile

class CV

{

int i;

public:

CV(int i=1)

:i(i)

{

};

void out()

{

cout << i;

}

void out() const volatile

{

cout << i;

}

void inc()

{

i++;

}

void inc_c() const

{

// i++; // i jest const

}

void inc_v() volatile

{

i++;

}

void inc_cv() const volatile

{

// i++;

}

};


Static const volatile

void main()

{

CV cv;

const CV cvc;

volatile CV cvv;

const volatile CV cvcv;

cv.inc();

cv.inc_c();

cv.inc_v();

cv.inc_cv();

// cvc.inc();

cvc.inc_c();

// cvc.inc_v();

cvc.inc_cv();

// cvv.inc();

// cvv.inc_c();

cvv.inc_v();

cvv.inc_cv();

// cvcv.inc();

// cvcv.inc_c();

// cvcv.inc_v();

cvcv.inc_cv();

cv.out(); //CV::out();

cvc.out(); //CV::out() const volatile;

cvv.out();

cvcv.out();

}


Const volatile2

const, volatile

  • metody uprzywilejowane nie mogą być static.

  • konstruktor ani destruktor nie może być const volatile ani static.

  • deklarowanie metod uprzywilejowanych nie może prowadzić do niejednoznaczności

    int f() const; // int f() const volatile;


Przyk ad pola const i static

Przykład: pola const i static

class info

{

static int cntr, // licznik istniejacych obiektow

serial; // statyczna zmienna pomocnicza

const int nr; // unikalny numer seryjny obiektu

public:

info();

info(const info & i);

~info();

info & operator=(const info &p);

};

int info::cntr=0, // static

info::serial=0; // static


Static const volatile

info::info()

:nr(++serial)

{

cntr++;

cout << "\nkonstruktor bezparametrowy obiektu nr" << nr;

cout << " jest " << cntr << " obiektow info";

cout.flush();

}

info::info(const info & i)

:nr(++serial)

{

cntr++;

cout << "\nkonstruktor kopiujacy obiektu nr" << nr << " z obiektu " << i.nr;

cout << " jest " << cntr << " obiektow info";

cout.flush();

}


Static const volatile

info::~info()

{

cntr--;

cout << "\ndestruktor obiektu nr" << nr;

cout << " zostanie " << cntr << " obiektow info";

cout.flush();

}

info & info::operator=(const info &p)

{

cout << "\noperator przypisania do obiektu nr " << nr;

cout << " z obiektu nr" << p.nr;

cout << " jest " << cntr << " obiektow info";

cout.flush();

return *this;

}


  • Login