PDA

Visualizza la versione completa : [C++] Parameter Constructor


Toxotes
30-10-2013, 14:23
Non mi è molto chiaro come opera il costruttore dei parametri inseriti dall'utente nella seguente classe che sto scrivendo (sto utilizzando uno schema di un libro, ma faccio fatica a capirne il significato):

questo è l'header


#ifndef _INTEREST_H
#define _INTEREST_H


class InterestCalc{
private:
void init();
void copy();

double i; //tasso d'interesse
double C; //capitale
int t, T; //durata o.f, interest freq.
double M; //montante

public:
//constructors & destructor

InterestCalc(); //default constructor
InterestCalc(const double& _i, const double& _C,
const int& _t, const int& _T,
const double _M); //parameter constructor
InterestCalc(const InterestCacl& rhs);//copy constructor
InterestCacl& operator = (const InterestCalc& rhs);//assignment
virtual ~InterestCalc();//virtual destructor

//getters, selector methods for our parameters

double geti() const;
double getC() const;
int gett() const;
int getT() const;
double getM() const;

//calculation methods

double simple_calc() const;
double compound_calc() const;
}
#endif

Ora il constructor per i parametri dell'utente nel source l'ho così scritto:


InterestCalc::InterestCalc(const double& _i, const double& _C, const int& _t, const int& _T, const double _M) {
i = _i;
C = _C;
t = _t;
T = _T;
M = _M;
}

mi sfugge come usare al meglio una classe così scritta. Cioè mi sfugge il ruolo di init() e quello del parameter constructor. Da quel che ho capito:

Se dichiaro: InterestCalc myYeld; la init inizializza le variabili private con i valori dati in init() giusto?
Se dichiaro: InterestCalc myYeld(a,b,c,d,e); il param. constructor passa tali valori alle variabili private?

Se così fosse il problema che mi si pone è questo, se io non ho tutte le variabili a priori ma voglio che le inserisca l'utente, come faccio? devo storarle su delle altre variabili e poi una volta che le ho tutte richiamare il costruttore (e qui perderebbe molto di senso avere quel costruttore, se le inserisco una a una tanto vale che le assegni quando le inserisco...tranne per il fatto da correggere che sono private), o c'è un'altro modo che mi sfugge?

P.S. mi viene in mente che i getters stanno lì forse proprio per questo:


double InterestCalc::geti() const {return i;}

quindi quando faccio myYeld.geti() = myi; posso così accedere alle variabili private sigolarmente.

se così fosse la mia domanda potrebbe diventare: allora a cosa serve avere il param. contructor e il getter? fanno si che io possa inserire tutte le var in una volta o accedere una ad una?

Grazie

Toxotes
30-10-2013, 17:27
ahi ahi...altro che getters e param. constructor...qui è pieno di errori (almeno stando al compilatore :)), melgio rivedere tutto per bene. In ogni caso il quesito rimane valido in termini generali, ciao ciao

Toxotes
30-10-2013, 22:07
mi sono espresso poco chiaramente? o semplicemente avete di meglio da fare (probabile :))

MItaly
30-10-2013, 23:02
I getter in questione restituiscono una copia dei valori interni alla classe, per cui non possono essere usati per modificarli.
In generale, questa sembra essere una classe in cui i parametri possono essere impostati solo al momento della costruzione, scegliendo o i parametri di default (nel caso del costruzione senza parametri) o specificandoli tramite il costruttore parametrico, per cui se vuoi specificare dei parametri lo puoi fare solo al momento della costruzione. In genere questo è comodo al momento di scrivere la classe perché sai che i parametri sono quelli e non cambieranno, e puoi fare un unico check di validità al momento della costruzione, garantendoti sempre uno stato "coerente" della classe.

Loading