• 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
21,371 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 961 wizyt
pytanie zadane 25 kwietnia 2015 w C i C++ przez Rayden Użytkownik (610 p.)
+3 głosów
3 odpowiedzi 240 wizyt
pytanie zadane 12 kwietnia 2015 w C i C++ przez Rayden Użytkownik (610 p.)
0 głosów
2 odpowiedzi 813 wizyt
pytanie zadane 2 sierpnia 2016 w C i C++ przez DragonCoder Nałogowiec (36,500 p.)

92,417 zapytań

141,222 odpowiedzi

318,984 komentarzy

61,831 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.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...