• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Czym są Gettery i Settery w C++

VPS Starter Arubacloud
+3 głosów
22,008 wizyt
pytanie zadane 5 lipca 2015 w C i C++ przez Porky Obywatel (1,190 p.)
Po co ich używać, jak ?. I co zastępuje je w programie ?

1 odpowiedź

+9 głosów
odpowiedź 5 lipca 2015 przez Buby Pasjonat (19,590 p.)
wybrane 6 lipca 2015 przez Porky
 
Najlepsza

Gettery i Settery to metody, które służą do pobierania oraz ustawiania wartości składowych, zazwyczaj prywatnych bądź chronionych w klasach. 

Po co ich używać? Ano widzisz, programowanie obiektowe wyznaje zasadę od ogółu do szczegółu, czyli programowanie rozpoczynasz zazwyczaj od opisania typu danych. Przeważnie twoim celem, jest stworzenie typu, który dość mocno przypomina typy wbudowane takie jak np. int czy double. Weźmy teraz na warsztat zapewne znaną Ci klasę std::string. Laik, który dopiero rozpoczyna przygodę z programowaniem uzna tą klasę, za typ jak każdy inny. Nie ma on pojęcia o znajdującej się pod spodem dynamicznie alokowanej tablicy charów etc. Aby uniknąć dostępu do tych danych, posiadają one kwalifikator prywatny - nikt z zewnątrz nie ma do nich dostępu. Pozwala to uniknąć błędów w programie, które mogą wynikać np. z błędnej inicjalizacji jakiejś zmiennej. Jednakże nasz użytkownik czasem może potrzebować dostępu do tych danych - np. aby wypisać nasz wyraz, bądź ustawić jego wartość na nowo. Gettery, jak sama nazwa wskazuje służą do pobierania wartości zmiennych. Zazwyczaj są to metody const, które nie modyfikują danych tylko je zwracają. Settery natomiast, służą do ustawiania wartości zmiennych.

Przykładowy kod, troszkę bez inwencji, ale pokazuje zasadę działania:

#include <iostream>

class Licznik
{
    public:
    Licznik(): counter(0)
    {}

    void set_Counter( int n )
    {
        counter = n;
    }

    int get_Counter() const
    {
        return counter;
    }

   private:
   int counter;
};

int main( void )
{
    Licznik m_Counter;
    std::cout << "Wartosc licznika wynosi: " << m_Counter.get_Counter() << std::endl;

    for( int i = 1; i <= 10; ++i )
    {
        m_Counter.set_Counter(i);
        std::cout << "Wartosc licznika wynosi: " << m_Counter.get_Counter() << std::endl;
    }

    return 0;
}

W programie zastąpić je może np. operator przypisania, który może ustawiać wartości składowych, bądź deklaracja przyjaźni, aby funkcje miały dostęp do składowych.

Pozdrawiam Patryk. wink

komentarz 6 lipca 2015 przez Porky Obywatel (1,190 p.)
A jak wyglądałoby to bez metody const ?
komentarz 6 lipca 2015 przez Buby Pasjonat (19,590 p.)

Hmm...No identycznie, tylko bez dopisku const na końcu metody. Dopisek ten oznacza, że metoda nie może modyfikować żadnej składowej - jeśli np. w jej wnętrzy chciałbyś ustawić jakiejś składowej nową wartość kompilator zgłosi błąd. No i posiadanie takiej metody pozwala na używanie jej w obiekcie typu const. Oczywiście nic nie stoi na przeszkodzie utworzenia gettera, który nie jest metodą const.

Chociaż w sumie zawsze są wyjątki od reguły - można ustawić składowej modyfikator mutable, który sprawia, że taka specjalna zmienna może zmienić swoją wartość w metodzie const. Ale powinno się tego używać tylko w specjalnych przypadkach - ja jeszcze takiego nie miałem. ;)

komentarz 12 grudnia 2015 przez Ziuziek Mądrala (5,140 p.)
    public:
    Licznik(): counter(0)
    {}

Czemu w tym skrypcie po Licznik sa nawiasy a pozniej dwukropek i prywatny atrybut z (0) co to znaczy wszystko?

komentarz 18 grudnia 2015 przez Buby Pasjonat (19,590 p.)
Hej! Przepraszam, że dopiero teraz piszę, ale dawno mnie tutaj nie było.
Jeśli pytanie jest nadal aktualne, to zaraz opowiem Ci o liście inicjalizacyjnej.

Na początku kilka uwag teoretycznych - lista inicjalizacyjna występuje tylko w konstruktorze klasy, bądź struktury. Pozwala ustawić wartości zmiennych, w tym stałych składowych klasy, przed uruchomieniem konstruktora. W wielu przypadkach używana, do utworzenia obiektów, dla konkretnych składowych.

W definicji konstruktora, po dwukropku definiujemy, jeśli mogę to tak określić pary - nazwa składowej(wartosc[argumenty], którą inicjalizujemy jej konstruktor).

W przypadku podstawowych typów zapis int x(110) jest równorzędny int x = 110. Zatem inicjalizujemy je najzwyczajniej wartością.

W razie dalszych pytań pisz :)

Podobne pytania

+1 głos
2 odpowiedzi 1,130 wizyt
pytanie zadane 25 kwietnia 2015 w C i C++ przez Rayden Użytkownik (610 p.)
+3 głosów
3 odpowiedzi 269 wizyt
pytanie zadane 12 kwietnia 2015 w C i C++ przez Rayden Użytkownik (610 p.)
0 głosów
2 odpowiedzi 980 wizyt
pytanie zadane 2 sierpnia 2016 w C i C++ przez DragonCoder Nałogowiec (36,500 p.)

93,008 zapytań

141,975 odpowiedzi

321,256 komentarzy

62,350 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...