Dzwon.

Są ci, którzy przeczytali tę wiadomość przed tobą.
Subskrybuj odbieranie artykułów świeżych.
E-mail
Nazwa
Nazwisko
Jak chcesz przeczytać dzwonek
Bez spamu

Używli członków klasy słowo kluczowe Statyczny. W tym kontekście jego wartość jest podobna do tego, że ma w C. Gdy członek klasy jest zadeklarowany jako statyczny, a następnie kompilator jest wskazaniem, że powinna istnieć tylko jedna kopia tego członka, bez względu na to, ile obiektów Ta klasa jest tworzona. Człon zewnętrzny jest używany we wszystkich obiektach tej klasy. Wszystkie dane statyczne są zainicjowane przez zera podczas tworzenia pierwszego obiektu, a inna inicjalizacja nie jest dostarczana.

Przy oświadczeniu statycznego członka danych klasy, członek ten nie jest określony. Zamiast tego konieczne jest zapewnienie definicji globalnej poza klasą. Odbywa się to dzięki nowej deklaracji zmiennej statycznej, a operator zakresu widoczności służy do identyfikacji klasy, do której należy zmienna. Jest to konieczne, aby zmienna statyczna była podświetlona pamięć.

Jako przykład rozważyć następny program.:

#Zawierać.
Licznik klasy (
Statyczna liczba int;
Publiczny:
nieważny setcount (int i) (liczyć \u003d i;);
Void showcount () (cout<< count << " "; }
};
Licznik int :: Count; // Liczba definicji
Int main () (
Przeciwnik A, B;
a.showcount (); // Wyświetla się 0.
b.showcount (); // Wyświetla się 0.
A.setCount (10); // Instalacja liczby statycznej na 10
a.showcount (); // Wyświetla 10.
b.showcount (); // Wyświetla również 10
Powrót 0;
}

Po pierwsze, zapoznajmy się, że zmienna statyczna całego rodzaju liczenia jest zadeklarowana w dwóch miejscach: w klasie Counter, a następnie - jako zmienna globalna. Borland C ++ inicjuje liczbę zero. Dlatego w rezultacie pojawia się pierwszy wyświetlacz ShowCount (). Obiekt A następnie ustawiony na liczbę równych 10. Po tym obie obiekt A i B są wyświetlane za pomocą funkcji ShowCount () i tej samej wartości 10. Ponieważ istnieje tylko jedna kopia Liczba używanych obiektów współdzielonych A i B, Następnie ekran jest wyświetlany w obu przypadkach wartości 10.

Możesz także mieć funkcje członkowskie statyczne. Funkcje członkowskie statyczne nie mogą bezpośrednio odnoszące się do danych nonatatycznych lub funkcji niezwiązanych z non-statycznymi w swojej klasie. Powodem tego jest brak tego wskaźnika dla nich, więc nie ma sposobu, aby dowiedzieć się, co niestandardowe działanie danych. Na przykład, jeśli istnieją dwie obiekty klasy zawierające funkcję statyczną F (), a jeśli f () próbuje uzyskać dostęp do zmiennej niestatycznej VaR, zdefiniowanej przez tę klasę, a następnie, jak można określić, która kopia VaR powinna być używany? Kompilator nie może rozwiązać takiego problemu. Z tego powodu funkcje statyczne mogą być stosowane tylko do innych funkcji statycznych lub danych statycznych. Ponadto funkcje statyczne nie mogą być wirtualne lub deklarowane z modyfikatorami Cinki. Funkcja statyczna można wywołać za pomocą obiektu klasy lub przy użyciu nazwy klasy i operatora zakresu. Niemniej jednak nie jest konieczne zapomnieć o tym nawet podczas wywoływania funkcji statycznej za pomocą obiektu, nie jest przekazywany do tego wskaźnika.

Kolejny krótki program ilustruje jeden z wielu sposobów używania funkcji statycznych. Sytuacja jest wystarczająco powszechna, gdy konieczne jest zapewnienie dostępu do ograniczonego zasobu, na przykład, takim jak udostępniony plik w sieci. Ponieważ ten program ilustruje, korzystanie z danych statycznych i funkcji używa metody, za pomocą którego obiekt może sprawdzić stan zasobu i dostęp do niego dostęp.

#Zawierać.


Dostęp do klasy (
Statyczny enum Access_t ACS;
// ...
Publiczny:


{
Zwrócić ACS;
}
// ...
};

Int main ()
{
Dostęp obj1, obj2;
Dostęp :: Set_access (zamknięty); // wezwanie za pomocą nazwy klasy
// ... kod

Jeśli (obj2.get_access () \u003d\u003d odblokowany) (// wezwanie za pomocą obiektu

Cout.<< "Access resource.\n";
}
Inaczej cout.<< "Locked out.\n";
// ...
Powrót 0;
}

Po uruchomieniu tego programu pojawi się "zablokowany wyjście" na ekranie. Należy pamiętać, że funkcja SET_ACCESS () jest spowodowana przez nazwę klasy i operatora zakresu. Funkcja Get_access () jest spowodowana obiektem i operatorem "punktu". Podczas wywołania funkcji statycznej można użyć żadnej z tych formularzy, a oba dają ten sam efekt. Warto eksperymentować trochę z tym programem, aby upewnić się, że jego zrozumienie jej pracy jest poprawna.

Jak zauważono, funkcje statyczne mają bezpośredni dostęp tylko do innych funkcji statycznych lub danych statycznych w tej samej klasie. Aby to sprawdzić, spróbujmy skompilować następującą wersję programu:

// Ten program zawiera błąd i nie będzie się skompilować
#Zawierać.
Enum Access_t (udostępniany, in_use, zablokowany, odblokowany);
// Klasa kontroluje rzadkie zasoby
Dostęp do klasy (
Statyczny enum Access_t ACS;
int I; // nie statyczny
// ...
Publiczny:
Statyczne void Set_access (Enum Access_t A) (ACS \u003d A;)
Statyczny enum Access_t get_access ()
{
i \u003d 100; // nie będzie się skompilować
Zwrócić ACS;
}
// ...
};
Enum Access_t Access :: ACS; // Definicja ACS
Int main ()
{
Dostęp obj1, obj2;
Dostęp :: Set_access (zamknięty); // wezwanie za pomocą nazwy klasy
// ... kod
// CAN OBJ2 Skontaktuj się z zasobem
Jeśli (obj2.get_access () \u003d\u003d odblokowany) (// wezwanie za pomocą obiektu
Dostęp :: Set_access (in_use); // wezwanie za pomocą nazwy klasy
Cout.<< "Access resource.\n";
}
Inaczej cout.<< "Locked out.\n";
// ...
}

Ten program nie zostanie skompilowany, ponieważ funkcja Get_access () próbuje uzyskać dostęp do zmiennej niestatycznej.

Początkowo nie jest konieczne w bezpośrednim zastosowaniu członków statycznych, ale ponieważ doświadczenie doświadczenia programistycznego zgromadziło się na C ++, stają się bardzo wygodnym narzędziem w niektórych sytuacjach, ponieważ mogą uniknąć używania zmiennych globalnych.

Możemy uzyskać do nich dostęp bezpośrednio przez nazwę klasy i operatora uprawnień obszaru widoczności. Ale co, jeśli zmienne statyczne są zamknięte? Rozważ następujący kod:

W tym przypadku nie możemy bezpośrednio uzyskać dostępu do niczego :: S_Value z Main (), ponieważ ten członek jest prywatny. Zwykle dostęp do członków klas zamknięty jest przeprowadzany przez metody publiczne. Chociaż moglibyśmy stworzyć zwykłą metodę, aby uzyskać dostęp do S_Value, ale wtedy musielibyśmy stworzyć przedmiot tej klasy, aby użyć metody! Jest lepsza opcja: możemy wykonać metodę statyczną.

Jak zmienne statyczne, metody statyczne. Nie należy przywiązać do żadnego obiektu pojedynczego klasy. Oto przykład powyżej, ale już z metodą statyczną:

klasa Cokolwiek (Prywatne: statyczne int S_Value; publiczne: statyczne int GetValue () (powrót S_Value;) // Metoda statyczna); cokolwiek :: S_Value \u003d 3; // Definicja statycznej zmiennej klasy CLASS INT INT MAIN () (STD :: Cout<< Anything::getValue() << "\n"; }

Ponieważ metody statyczne nie są powiązane z określonym obiektem, można je nazwać bezpośrednio przez nazwę klasy i operatora zezwolenia obszaru widoczności, a także przez obiekty klasy (ale nie jest zalecane).

Metody statyczne nie mają wskaźnika * to

Metody statyczne mają dwie ciekawe funkcje. Po pierwsze, ponieważ metody statyczne nie są związane z obiektem, nie mają! Tutaj ma sens, ponieważ * ten wskaźnik zawsze wskazuje obiekt, z którym działa metoda. Metody statyczne mogą nie działać przez obiekt, dlatego * ten indeks nie jest potrzebny.

Po drugie, metody statyczne mogą bezpośrednio skontaktować się z innymi członkami statycznymi (zmiennymi lub funkcjami), ale nie mogą być nieskalowe. Wynika to z faktu, że członkowie niestatyczne należą do obiektu klasy i metody statyczne - Nie!

Jeszcze jeden przykład

Metody statyczne można określić poza korpusem klasy. Działa tak samo jak w przypadku konwencjonalnych metod. Na przykład:

#Zawierać. Idgenerator klasy (Prywatny: statyczny Int S_Naxtid; // Ogłoszenie zmiennej członka statycznego Publicznie: Static Int GetnextID (); // Ogłoszenie metody statycznej); // Definicja elementu zmiennego statycznego znajduje się poza korpusem ciała. Należy pamiętać, że nie używamy słowa kluczowego Static // Start Generowanie ID od 1 Int Idgenerator :: S_NextID \u003d 1; // Definicja metody statycznej znajduje się poza korpusem ciała. Należy pamiętać, że nie używamy słowa kluczowego statycznego int idgeneratora :: GetnextID () (RETURN S_Nextid ++;) int Main () (dla Int Liter \u003d 0; Liczba< 4; ++count) std::cout << "The next ID is: " << IDGenerator::getNextID() << "\n"; return 0; }

#Zawierać.

idgenerator klasy.

prywatny:

statyczne int s_nextid; // ogłoszenie członka zmiennego statycznego

publiczny:

statyczne int GetnextID (); // Ogłoszenie metody statycznej

// Zacznij generować identyfikator od 1

int idgenerator :: S_NextID \u003d 1;

idgenerator :: GetnextID () (Return S_NextID ++;)

int main ()

dla (int liczenia \u003d 0; liczba< 4 ; ++ count )

sTD :: COut.<< "The next ID is: " << IDGenerator :: getNextID () << "\n" ;

powrót 0;

Wynik programu jest wyższy:

Następny identyfikator to: 1
Następny identyfikator to: 2
Następny identyfikator to: 3
Następny identyfikator to: 4

Uwaga, ponieważ wszystkie zmienne i funkcje tej klasy są statyczne, wtedy nie musimy tworzyć przedmiotu tej klasy do pracy! Człon zmiennych statycznych służy do przechowywania wartości następnego identyfikatora, który powinien zostać przypisany do niego, a metoda statyczna - aby przywrócić identyfikator i zwiększa go.

Ostrzeżenie o zajęciach ze wszystkimi członkami statycznymi

Uważaj na pisanie zajęć ze wszystkimi członkami statycznymi. Chociaż takie "lekcje czysto statyczne" mogą być przydatne, ale także mają swoje wady.

Po pierwsze, ponieważ wszystkie członkowie statyczne są tworzone tylko raz, a następnie kilka kopii "czysto statycznej klasy" nie może być (bez klonowania klasy i jego dalszej nazwy). Na przykład, jeśli potrzebujemy dwóch niezależnych przedmiotów klasy idgeneratora, będzie to niemożliwe za pośrednictwem "czystej statycznej" klasy.

C ++ nie obsługuje konstruktorów statycznych

Jeśli możesz zainicjować zwykłą zmienną członkowską, zgodnie z logiką rzeczy, powinieneś być w stanie zainicjować zmienne statyczne przez konstruktora statycznego. I chociaż niektóre języki nowoczesne naprawdę wspierają projektantów statycznych w tym celu, C ++, niestety nie jest jednym z nich.

Jeśli zmienna statyczna może zostać zainicjowana bezpośrednio, projektant nie jest potrzebny: Możesz zdefiniować element zmienny statyczny, nawet jeśli jest prywatny. Robimy to w powyższym przykładzie z S_NextID. Oto kolejny przykład:

klasa coś (Public: Static Std :: Vector S_mychars; ); Std :: wektor. Coś :: S_MYCHARS \u003d ("O", "A", "U", "I", "E"); // Określ członek zmiennych statycznych

coś klasy.

publiczny:

statyczne STD :: wektor< char > S_mychars;

std :: wektor< char > Coś :: S_MYCHARS \u003d ("O", "A", "U", "I", "E"); // Określ członek zmiennych statycznych

Jeśli chcesz wykonać kod (na przykład, cykl), aby zainicjować zmienną statyczną, czyli kilka różnych sposobów na to. Następujący sposób jest najlepszy z nich:

#Zawierać. #Zawierać. Coś klasy (Prywatne: Static Std :: Vector S_mychars; Public: Class _ned // Określ zainwestowaną klasę o nazwę _ned (public: _nestest () // Designer _ned Inicjalizuje nasz statyczny członek zmiennych (S_MYCHARS.PUSH_BACE (O "); S_MYCHARS.PUSH_BACE (" A "); S_MYCHARS.PUSH_BACE (" S_MYCHARS.PUSH_BACE (" U "); S_MYCHARS.PUSH_BACE (" I "); S_MYCHARS.PUSH_BACE (" E ");)); // Metoda statyczna do wyjścia S_MYCHARS STATIC VOIC GETOMETHING () (dla (Auto Const & Element: S_MYCHARS) STD :: COut<< element << " "; } private: static _nested s_initializer; // используем статический объект класса _nested для гарантии того, что конструктор _nested выполнится }; std::vector Coś :: S_mychars; // Określenie naszego członka zmiennej statycznej coś :: _ zagnieżdżone coś :: S_initializer; // Określ nasz statyczny S_initializer, który spowoduje, że projektant _nied Initializuje S_MYChars Int Główny () (coś: Getomething (); Powrót 0;)

#Zawierać.

#Zawierać.

coś klasy.

prywatny:

statyczne STD :: wektor< char > S_mychars;

publiczny:

klasa _nest. // Określ zainwestowaną klasę o nazwę _nest

publiczny:

Zagnieżdżone () // Designer _ned Inicjalizuje nasz statyczny członek zmiennych

s_mychars. Push_back (O ");

s_mychars. Push_back ("a");

s_mychars. Push_back ("u");

s_mychars. Push_back ("i");

s_mychars. Push_back ("e");

Ostatnia aktualizacja: 08.10.2017

Oprócz zmiennych i metod, które odnoszą się bezpośrednio do obiektu, C ++ umożliwia określenie zmiennych i metod, które są bezpośrednio związane z klasą lub w inny sposób członkowie statyczni klasy. Zmienne statyczne i metody są generalnie wśród całej klasy. Aby je ustalić, słowo kluczowe jest statyczne.

Na przykład bank może mieć wiele różnych składek, ale wszystkie składki będą miały pewne wspólne stopy procentowe. Aby opisać konto bankowe, definiujemy i używamy następującej klasy:

#Zawierać. Konto klasy (SUBLIC: Konto (ta suma) (ta-\u003e suma \u003d suma;) statyczne int GetRAnate () (szybkość powrotu;) Ustawienie utwardzanie statyczne (int r) (stawka \u003d r;) podwójna getincom () (suma zwrotna + Suma * stawka / 100;) Prywatne: podwójna suma; statyczne stawka;); Konto Int :: Cena \u003d 8; Int main () (konto konta1 (20 000); konto konta2 (50 000); konto :: Ustawić (5); // Ponownie zainstaluj wartość stawki STD ::<< "Rate: " << Account::getRate() << std::endl; std::cout << "Rate: " << account1.getRate() << " Income: " << account1.getIncome() << std::endl; std::cout << "Rate: " << account2.getRate() << " Income: " << account2.getIncome() << std::endl; return 0; }

Klasa konta definiuje jedną zmienną statyczną i dwie funkcje statyczne do kontrolowania tej zmiennej. Określając funkcje statyczne, warto rozważyć, że wewnątrz nich możemy używać tylko zmiennych statycznych klasy, takich jak zmienna stawki. Ultimate zmienne stosuje się w funkcjach statycznych.

Ponadto, w funkcjach statycznych, wskaźnik ten nie może być stosowany, co w zasadzie i tak oczywiste, ponieważ wskazuje na to, że aktualny obiekt i funkcje statyczne należą do klasy.

Ważne jest również, że jeśli klasa zawiera zmienne statyczne, muszą być dodatkowo zdefiniowane poza klasą:

Konto Int :: Cena \u003d 8;

Przypisz wartość początkowa zmiennej jest opcjonalna.

Warto również zauważyć, że ponieważ członkowie statyczne są generalnie wśród całej klasy, wówczas nazwa klasy jest wykorzystywana do odwołania się do członków statycznych, po czym operator ma ::. Albo możemy skontaktować się z członkami publicznymi poprzez zmienne tej klasy:

Konto :: GetCrat () Konto1.getrate ()

Program biurowy konsoli:

Oceń: 5 Cena: 5 dochód: 21000 Cena: 5 dochodów: 52500

Również często w klasach stosują stałe statyczne. Na przykład dokonamy stałej stawki zmiennej w klasie konta:

#Zawierać. Konto klasy (publiczne: statyczne statyczne stawka \u003d 8; konto (podwójna suma) (ta-\u003e suma \u003d suma;) podwójna getinkome () (suma zwrotna + suma * stawka / 100;) Prywatne: Podwójna suma;); Int main () (konto konta1 (2000); konto konta2 (50 000); std :: cout<< "Rate: " << account1.rate << "\tIncome: " << account1.getIncome() << std::endl; std::cout << "Rate: " << account2.rate << "\tIncome: " << account2.getIncome() << std::endl; return 0; }

W przeciwieństwie do zmiennych statycznych, stałe stałe nie muszą być dodatkowo zdefiniowane poza klasą.

Słowo kluczowe statyczne.

Czasami konieczne jest określenie takiego członka klasy, który będzie używany niezależnie od wszystkich innych obiektów tej klasy. Z reguły dostęp do członka klasy jest zorganizowany przez obiekt tej klasy, ale jednocześnie można utworzyć członek klasy dla samopoczucia bez odniesienia do określonej instancji obiektu. W celu stworzenia takiego członka klasy, wystarczy określić na samym początku ogłoszenia słowo kluczowe statyczne..

Jeśli członek klasy jest zadeklarowany jako statyczny, staje się dostępny przed utworzeniem dowolnych obiektów obiektów i bez odniesienia do dowolnego obiektu. Za pomocą słowa kluczowego statycznego można zadeklarować zarówno zmienne, jak i metody. Najbardziej charakterystycznym przykładem członka typu statycznego jest metoda główna (), która jest zadeklarowana, ponieważ powinna być nazywana systemem operacyjnym na samym początku wykonywanego programu.

W celu użycia typu statycznego członka na zewnątrz klasy, wystarczy określić nazwę tej klasy za pomocą punktu operatora. Ale nie jest konieczne stworzenie obiektu dla tego. W rzeczywistości członek typu statycznego jest dostępny nie przez odniesienie do obiektu, ale przez nazwę swojej klasy.

Zmienne zadeklarowane jako statyczne są zasadniczo globalne. Gdy obiekty są zadeklarowane w swojej klasie, kopia statycznego typu zmiennej nie jest tworzona. Zamiast tego wszystkie wystąpienia klasy ważniejsza używają tego samego typu zmiennej statycznej. Taka zmienna jest inicjowana przed jego użyciem w klasie.

Przykład użycia statycznego słowa kluczowego:

Za pomocą systemu; za pomocą System.Collections.genic; Za pomocą System.linq; Za pomocą System.Text; UZTOLEGACACACESCACE1 (klasa Mycircle (//2 Metody zwracające obszar i długość publicznego statycznego okręgu Sqrcircle Circle (int RADIUS) (RADIUS * RADIUS;) Publiczny statyczny podwójny Longcircle (Int Radius) (zwrot 2 * math.pi * RADIUS) ;)) PROGRAM KLASY (INT R \u003d 10; // Metody wywołujące z innej klasy // bez tworzenia instancji obiektu tej klasy Console.WRITELINE ("Koło Pierścienia Square (0) \u003d (1: ##)", R, mycircle.sqrcircle (R)); Console.Writelinine ("Długość koła jest równa (0: #. ##)", mycircle.longcircle (R)); Console.Readline ()

Szereg ograniczeń jest nałożonych na stosowanie metod typu statycznego:

    W metodzie statycznej nie powinno być odniesienia do tego, ponieważ ta metoda nie jest wykonywana w stosunku do dowolnego obiektu

    W metodzie typu statycznego dozwolone są tylko inne metody statyczne, ale nie metoda instancji z tej samej klasy. Faktem jest, że metody instancji działają z określonymi obiektami, a metoda statycznego typu nie jest wywoływana do obiektu. W związku z tym ta metoda nie ma żadnych przedmiotów, które mógłby działać

    Podobne ograniczenia są nałożone na dane statyczne. W przypadku metody statycznej tylko inne dane statyczne określone w swojej klasie okazują się bezpośrednio dostępne. W szczególności nie może obsługiwać zmiennej kopii swojej klasy, ponieważ nie ma obiektów, z którymi mógł działać

Statyczne konstruktory.

Projektant można również zadeklarować jako statyczne. Konstruktor statyczny jest zwykle używany do zainicjowania składników używanych do całej klasy, a nie oddzielnej instancji obiektu tej klasy. Dlatego członkowie klasy są inicjowane przez statycznego projektanta przed utworzeniem dowolnych obiektów tej klasy:

Za pomocą systemu; za pomocą System.Collections.genic; Za pomocą System.linq; Za pomocą System.Text; Współpraca przestrzeni nazw 12 (publiczny int a; publiczny Int b; // Statyczne statyczne konstruktor MyClass () (A \u003d 10;) // Konwencjonalny Designer Publiczny MyClass () (B \u003d 12;)) Program klasy (Statyczne Void Główna (String Args) (Konsola.Writelina ("Dostęp do instancji klasy A:" + myClass.a); MyClass OBJ \u003d Nowy MyClass (); Console.Writelinine ("Dostęp do instancji klasy B:" + obj.b); konsola .Czytaj linię ();)))

Należy pamiętać, że projektant statyczny jest wywoływany automatycznie, gdy klasa jest ładowana po raz pierwszy, a przed projektantem instancji. Z tego możesz dokonać bardziej ogólnego wniosku: Konstruktor statyczny musi być wykonywany do dowolnego projektanta instancji. Ponadto statyczne konstruktorzy nie mają modyfikatorów dostępu - używają domyślnego dostępu, dlatego nie można ich wywołać z programu.

Zajęcia statyczne

Klasa może być ogłoszona jako statyczna. Klasa statyczna ma dwa główne właściwości. Pierwsza, statyczna klasa obiektów do tworzenia to jest niemożliwe. I po drugie, klasa statyczna musi zawierać tylko członkowie statyczni. Klasa statyczna jest tworzona zgodnie z deklaracją klasyfikowanej klasy, modyfikowaną przy użyciu słowa kluczowego statycznego.

nazwa klasy klasy statycznej (// ...

Zajęcia statyczne stosują głównie w dwóch przypadkach. Po pierwsze, klasa statyczna jest wymagana podczas tworzenia metoda rozszerzeń. Metody ekspansji są głównie związane z językiem LINQ. I po drugie, klasa statyczna służy do przechowywania agregatu metod statycznych związanych ze sobą.

Lekcja 25. Funkcje statyczne i elementy danych

Do tej pory każdy obiekt, który tworzy, miał swój własny zestaw elementów danych. W zależności od celu aplikacji mogą istnieć sytuacje, w których obiekty tej samej klasy muszą udostępniać jedno lub więcej elementów danych. Załóżmy na przykład, że piszę program płatności, który śledzi czas pracy dla 1000 pracowników. Aby określić stawkę podatkową, program powinien znać warunki, w których działa każdy pracownik. Niech użycie klasy zmiennej state_of_work.Jeśli jednak wszyscy pracownicy pracują w tych samych warunkach, Twój program może udostępnić ten element danych dla wszystkich obiektów typu pracownik.W ten sposób program zmniejsza wymaganą ilość pamięci, rzucając 999 kopii tych samych informacji. Aby udostępnić element klasy, musisz zadeklarować ten przedmiot jako statyczne (statyczne).Ta lekcja uważa kroki, które należy wykonać do udostępniania elementu klasy przez kilka obiektów. Pod koniec tej lekcji opanujesz następujące główne koncepcje:

    C ++ Umożliwia posiadanie obiektów tego samego typu, który udostępnił jeden lub więcej elementów klasy.

    Jeśli program przypisuje wartość do elementu współdzielonego, wszystkie obiekty tej klasy natychmiast uzyskać dostęp do tej nowej wartości.

    Aby utworzyć wspólny element danych klasy, musisz przewidzieć nazwę słowa kluczowego elementu klasy statyczny.

    Po tym, jak program ogłosiła element klasy jako statycznypowinien ogłosić zmienną globalną (poza definicją klasy) odpowiadającym tym wspólnym elementem klasy.

    Twoje programy mogą używać słowa kluczowego statycznyaby wywołać metodę klasy, gdy program mógł jeszcze nie ogłosić żadnych przedmiotów tej klasy.

Udostępnianie elementu danych.

Zwykle, gdy tworzysz obiekty określonej klasy, każdy obiekt otrzymuje swój własny zestaw elementów danych. Istnieją jednak takie sytuacje, w których obiekty tej samej klasy muszą udostępniać jedno lub więcej elementów danych. (statyczne E.konopie danych). W takich przypadkach deklaruj elementy danych jako wspólny Il.i prywatnya następnie zakończ rodzaj słowa kluczowego statycznyjak pokazano niżej:

prywatne: statyczne int Sharered_Value;

Po deklaracji klasy musisz zadeklarować przedmiot jako zmienną globalną poza klasą, jak pokazano poniżej:

int class_name :: Shared_value;

Następujący program Share_it.CPP definiuje klasę seria książekudostępnianie elementu liczba stron,który jest taki sam dla wszystkich obiektów (książki) klasy (seria). Jeśli program zmienia wartość tego elementu, zmiana natychmiast manifestuje się we wszystkich obiektach klasy:

#Zawierać.

#Zawierać.

klasa książki_serie.

(Public: Book_series (Char *, Char *, Float); Void SHOW_BOOK (void); void set_pages (int);

int book_series :: Page__Ccount;

void book_series :: set_pages (strony Int)

(Strona_count \u003d strony;)

book_Series :: Book_series (tytuł Char *, Char * autor, pływak Cena)

(Strcpy (Book_series :: Tytuł, tytuł); Strcpy (Book_series :: autor, autor); Book_series :: Cena \u003d Cena;)

void book_series :: show_book (void)

(Cout.<< "Заголовок: " << title << endl; cout << "Автор: " << author << endl; cout << "Цена: " << price << endl; cout << "Страницы: " << page_count << endl; }

(Programowanie książki ("Programowanie uczenia się na C ++", "Jamsa", 22,95); Słowo książki_Series ("Naucz się pracować ze słowem dla Windows", "Wyatt", 19,95); Word.set_pages (256); Programming.Show_book (); Word.show_book (); Cout<< endl << "Изменение page_count " << endl; programming.set_pages(512); programming.show_book(); word.show_book(); }

Jak widać, klasa deklaruje liczba stron.tak jak statyczne int.Natychmiast dla definicji klasy, program ogłasza element liczba stron.jako zmienna globalna. Gdy program zmienia element liczba stron,zmiana natychmiast manifestuje się we wszystkich obiektach klasowych seria książek.

Udostępnianie elementów klasy

W zależności od programu, sytuacje są możliwe, gdy trzeba udostępnić pewne dane przez wiele instancji obiektu. Aby to zrobić, zadeklaruj taki przedmiot jako statyczny. Następnie zadeklaruj ten element poza klasą jako zmienną globalną. Wszelkie zmiany, które Twoim programem jest z tym elementem, zostanie natychmiast odzwierciedlone w obiektach tej klasy.

Użycie elementów z atrybutamipubliczne statyczne, jeśli obiekty nie istnieją

Po prostu dowiedziałeś się, że deklarujesz element klasy statyczny.ten element jest współdzielony przez wszystkie obiekty tej klasy. Jednak sytuacje są możliwe, gdy program nie stworzył jeszcze obiektu, ale musi używać elementu. Aby użyć elementu, Twój program powinien go zadeklarować publicznyi statyczny.Na przykład następujący program US_MBR.CPP używa elementu liczba stron.z klasy seria książeknawet jeśli ta klasa nie istnieją:

#Zawierać.

#Zawierać.

klasa książki_serie.

(Public: Static Int Page_Count; Prywatne: Tytuł Char; CHAR Autor; Cena pływaka;);

int book_series :: strona_count;

void Main (Void) (Book_Series :: Page_Count \u003d 256; Cout<< "Текущее значение page_count равно " << book_series::page_count << endl; }

W tym przypadku, ponieważ klasa definiuje element klasy liczba stron.tak jak publicznyprogram może odnosić się do tego elementu klasy, nawet jeśli obiekty klasowe seria książek.nie istnieje.

Korzystanie z elementów statycznych

Poprzedni program Ilustrowany użycie statycznyelementy danych. Podobnie C ++ pozwala określić statycznyelementy funkcyjne (metody). Jeśli tworzysz statycznymetoda, program może powodować taką metodę, nawet jeśli obiekty nie zostały utworzone. Na przykład, jeśli klasa zawiera metodę, która może być używana do danych poza klasą, możesz wykonać tę metodę statyczny.Poniżej jest klasa menu,który używa sekwencji ANSI ESC do czyszczenia ekranu wyświetlacza. Jeśli system ma sterownik ansi.sys, możesz użyć metody czysty ekran.aby oczyścić ekran. Ponieważ ta metoda jest zadeklarowana jako statyczny,program może go użyć, nawet jeśli obiekty obiektów menu.nie istnieje. Następujący program CLR_SCR.CPP wykorzystuje metodę czysty ekran.aby wyczyścić ekran wyświetlacza:

#Zawierać.

(Publiczne: statyczne void clear_screen (void); // MUSI być inne prywatne metody: int nume_of_menu_options;);

menu Void :: Clear_screen (Void)

(Cout.<< "\033" << "}

Dzwon.

Są ci, którzy przeczytali tę wiadomość przed tobą.
Subskrybuj odbieranie artykułów świeżych.
E-mail
Nazwa
Nazwisko
Jak chcesz przeczytać dzwonek
Bez spamu