Oto pytanie, które pojawia się wielokrotnie w implementacji klasy C++. Ciekawi mnie, jakie są tutaj ludzkie myśli. Który kod preferujesz i dlaczego?C++ Funkcje prywatne: czy przekazywać zmienną składową klasy według parametru funkcji, czy nie
class A
{
public:
/* Constructors, Destructors, Public interface functions, etc. */
void publicCall(void);
private:
void f(void);
CMyClass m_Member1;
};
z
void A::publicCall(void)
{
f();
}
void A::f(void)
{
// do some stuff populating m_Member1
}
Lub alternatywnie:
class A
{
public:
/* Constructors, Destructors, Public interface functions, etc. */
void publicCall(void);
private:
void f(CMyClass &x);
CMyClass m_Member1;
};
z
void A::publicCall(void)
{
f(m_Member1);
}
void A::f(CMyClass &x)
{
// do some stuff to populate x,
// locally masking the fact that it's really m_Member1
}
Chyba zawsze preferują drugą bo wtedy f
może wtedy działać na dowolnym instancja CMyClass
ale, powiedziałem, mam dużo kodu, gdzie pierwszy jest całkowicie ważny, ponieważ f
będzie działał tylko na m_Member1
i naprawdę podzielę go na dwie funkcje, aby kod był bardziej czytelny.
Tak, to jest raczej pytanie do dyskusji niż pytanie "odpowiedź", ale jestem bardziej zainteresowany rozumowaniem. Zaznaczę jako odpowiedź odpowiedź, która daje dobre uzasadnienie lub dobre kryterium.
Pamiętaj też, że to tylko zabawny przykład. Klasa będzie większa niż ta w rzeczywistości, a zatem organizacja jest ważna.
W twoim drugim przypadku możesz ustawić 'f' statyczny i stworzy on prawie identyczny kod do pierwszego przypadku. –
@Kerrek SB, To prawda i jest świetnym punktem. W rzeczywistości nie ma powodu, dla którego 'f()' musi być nawet członkiem tej klasy. Może to być samodzielna funkcja użyteczności. Wystarczy powiedzieć na razie, że 'f()' nie jest szczególnie użyteczne, z wyjątkiem kontekstu tej klasy. –
dlaczego pierwsze f nie może działać na żadnej instancji CMyClass? – aib