Scusate se la domanda è banale, ma non trovo niente che mi risolva questo dubbio.
Ho implementato un classe nel seguente modo
codice:
class Classe
{
public:
//costruttore, distruttore, ecc
tipo3 setMembro3(const tipo1& parametro1, const tipo2& parametro2);
private:
void setMembro3();
tipo1 mMembro1;//dato membro num 1
tipo2 mMembro2;//dato membro num 2
tipo3 mMembro3;//dato membro num 3
}
I due metodi setMembro3 svolgono il medesimo compito/operazioni, l'unica differenza è che il metodo pubblico lavora sui parametri che gli vengono passati e restituisce un dato che ha lo stesso significato di mMembro3, mentre il metodo privato non necessita di parametri in quanto parametro1 e parametro2 in questo caso sono rispettivamente mMembro1 e mMembro2 (se dovessi fare un esempio pratico, potrebbe essere la classe una sezione rettangolare, membro 1 la base, membro 2 l'altezza, membro3 l'area).
Con qualche riga di codice forse è più chiaro:
codice:
tipo3 Classe::setMembro3(const tipo1& parametro1, const tipo2& parametro2)
{
tipo3 temp;
temp=/*operazioni coi parametri 1 e 2*/;
return temp;
}
codice:
void Classe::setMembro3()
{
mMembro3=/*operazioni con mMembro1 e mMembro2*/;
}
Ho pensato di fare le due implementazioni in modo da avere a disposizione un metodo pubblico da poter usare anche quando l'istanza della classe non dovesse essere ncessariamente creata, per qualsiasi motivo, mentre il metodo privato da usare ad esempio nel costruttore della classe in cui vengono passati i parametri 1 e 2, assegnati ai rispettivi dati membro, e quindi richiamato il metodo setMembro3().
All'inizio mi sembrava una bella pensata, ma dopo aver fatto una cosa del genere, mi chiedo se duplicare i metodi abbia senso, se l'unico vantaggio è quello di evitare questa scrittura
codice:
mMembro3=setMembro3(mMembro1, mMembro2);
In qualche caso questo approccio può tornare vantaggioso, o in fase di manutenzione crea solo confusione e maggior probabilità di errore, quindi mi tengo un solo metodo, quello pubblico, e uso sempre e solo quello?
Ne approfitto per un'ulteriore domanda: come linea generale, anche se un metodo viene implementato come private, perchè non servirà mai all'esterno, e gli unici parametri che ha bisogno sono i dati membro della classe, è meglio che il prototipo sia
in cui non passo parametri in quanto può accedere ai dati membro della classe
oppure
codice:
metodo(parametro1, parametro2,...);
e quando richiamo il metodo gli passo i dati membro,
codice:
metodo(mMembro1, mMembro2);
col vantaggio di poter specificare che i parametri sono const nel caso non debbano essere modificati e passati anche by reference?
Grazie