W niemal każdym przypadku, gdy myślisz, że musisz stworzyć setera AND getter (czyli w tym samym czasie), twój projekt jest nieprawidłowy.
Zastanów się, jaki cel ma num_chests
? Nie możesz iść nigdzie, nie wiedząc, co to jest.
Według twojego kodu, zgaduję, że zawiera on liczbę skrzyń na poziomie. W takim przypadku nie chcesz dostarczać setera dla tej wartości dla wszystkich. Chcesz, aby wartość była równa liczbie skrzyń w grze, a dostarczając setera, każdy może unieważnić ten niezmiennik.
Zamiast tego możesz oferować TYLKO getter, a możesz kontrolować jego wartość w klasie.
class Chest : public GameObject
{
public:
Chest() { ++num_chests_; }
~Chest() { --num_chests_; }
static int num_chests() { return num_chests_; }
private:
static int num_chests_;
};
int Chest::num_chests_ = 0;
Więcej wyjaśnień na temat tego, dlaczego podmioty pobierające i ustawiające są złymi decyzjami w mojej opinii. Jeśli podasz setter i getter, masz tylko złudzenie kontroli nad zmienną. Rozważ std::complex
.Dlaczego
std::complex<double> my_complex(1.0, 5.0);
my_complex.real(my_complex.real()+1);
lepiej nad
std::complex<double> my_complex(1.0, 5.0);
my_complex.real()++;
odpowiedź: kiedy std::complex
został zaprojektowany, nie było żadnych odniesień w C++. Ponadto, Java nie ma odniesień w stylu C++, więc muszą napisać kod standardowego elementu wszędzie. Teraz GCC zwraca const odniesienia tu jako przedłużenie i C++ 11 pozwala
reinterpret_cast<double (&)[2]>(non_const_non_volatile_complex_variable)[0]
i
reinterpret_cast<double (&)[2]>(non_const_non_volatile_complex_variable)[1]
jako prawidłowy sposób dostępu do rzeczywistych i urojonych części z std::complex<value>
.
Jeśli getter nie robi nic, a seter nic nie robi, to oba są błędne. Wpisz 'num_chests_' jako publiczny. W przeciwnym razie wymagany jest drugi. Niewiarygodnie rzadkie jest zwracanie członka przez odniesienie. –
Możesz też użyć opcji 3 i ustawić 'num_chest' jako" publiczny "element danych, zwłaszcza jeśli twój seter nie musi wykonywać żadnych testów sprawdzających. – Praetorian
Nie sądzę, że jest to szczególnie złe ćwiczenie. Jest to popularny język w C++ do używania/zwracania odnośników. –