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.