Ecco una domanda che si presenta ancora e ancora nell'implementazione della classe C++. Sono curioso di sapere quali sono i pensieri delle persone qui. Quale codice preferisci e perché?Funzioni private C++: se passare la variabile membro della classe in base al parametro funzione, oppure no
class A
{
public:
/* Constructors, Destructors, Public interface functions, etc. */
void publicCall(void);
private:
void f(void);
CMyClass m_Member1;
};
con
void A::publicCall(void)
{
f();
}
void A::f(void)
{
// do some stuff populating m_Member1
}
Oppure l'alternativa:
class A
{
public:
/* Constructors, Destructors, Public interface functions, etc. */
void publicCall(void);
private:
void f(CMyClass &x);
CMyClass m_Member1;
};
con
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
}
Credo che preferisco sempre la seconda perché poi f
può quindi operare su qualsiasi istanza di CMyClass
ma, detto questo, ho un sacco di codice in cui il primo è perfettamente valido dal f
funzionerà sempre su m_Member1
e lo sto davvero suddividendo in due funzioni per rendere il codice più leggibile.
Sì, questa è più una domanda di discussione che una domanda di "risposta", ma sono più interessato al ragionamento. Contrassegnerò come risposta una risposta che dia un buon ragionamento o un buon criterio.
Inoltre, tieni presente che questo è solo un esempio di giocattolo. La classe sarà più grande di questa realtà e quindi l'organizzazione è importante.
Nel secondo caso, è possibile rendere 'f' statico e creare codice quasi identico al primo caso. –
@Kerrek SB, questo è vero ed è un ottimo punto. In realtà, non c'è ragione per cui f() 'deve essere anche un membro di questa classe. Potrebbe essere la sua funzione di utilità autonoma. Basti dire per ora che 'f()' non è particolarmente utile se non nel contesto di questa classe. –
perché il primo f non può funzionare su qualsiasi istanza di CMyClass? – aib