Det er tull å gjøre lønn foranderlig; du bare gjør det mulig for kode som får en konstant objekt å rote med lønn. Dersom den ansatte er konstant, bør du ikke rote med lønnen sin.
Så hva om du ønsker den ansattes navn og id å være konstant, men ikke lønn? Vel, bare si det
class Employee {public: Medarbeider (string name = "No Name", string id = "000-00-0000", dobbel lønn = 0): snitt (navn), _id (id) {_salary = lønn; } String getName () const {return snitt;} string getid () const {return _id;} dobbel getSalary () const {return _salary;} void setSalary (dobbel lønn) {_salary = lønn;} void fremme (dobbel lønn) { _salary = lønn;} private: const string snitt; const string _id; double _salary; };
Nå er de konstant.
Selvfølgelig betyr dette at du bare kan sette dem i konstruktøren.
Så hvis ovennevnte galskap er ikke hva foranderlig er for, hva er det for? Her er den subtile saken: foranderlig er for tilfellet der et objekt er logisk konstant, men i praksis må endres. Disse sakene er få og langt mellom, men de finnes Her er ett eksempel:. Du har en konstant objekt, men for debugging formål vil spore hvor ofte en konstant metode kalles på den. Logisk du ikke endrer objektet. Vær oppmerksom på at hvis du tar beslutninger i ditt program basert på en foranderlig variabel, har du ganske sikkert krenket logisk constness og trenger å revurdere ting class Employee {public:. Medarbeider (const std :: string & navn): snitt (navn), _access_count (0) {} void settnavn (const std :: string & navn) {snitt = navn; } Std :: string get_name () const {_access_count ++; returnere snitt; } Int get_access_count () const {return _access_count; } Private: std :: string snitt; foranderlig int _access_count; }; Som et mer komplekst eksempel kan det være lurt å cache resultatene av en kostbar operasjon: * /Pi = 4; for (langt skritt = 3; trinnet Nå har vi ikke beregne pi før noen ber om det, men når de gjør vi cache resultatet, noe som er bra fordi vi beregne det på en veldig treg og dum måte. Logisk funksjonen er fortsatt konst (pi er ikke om å endre). Til syvende og sist du nesten helt sikkert ikke trenger foranderlig til enhver tid. Jeg har gått år mellom ønsk class MathObject {public: MathObject (): pi_cached (false) {} dobbel pi () const {if (! pi_cached) {/* Dette er en sinnsykt treg måte å beregne pi.
Uttalelser og Javascript Eval Function