*   >> Læs Uddannelse artikler >> science >> programming

C ++ & amp; # 039; s Bevægelig og konceptuelle Constness

reference, kan vi passere i en robot robot og få det rigtige svar (falsk). * /Bool take_pulse (const Person & X) {return X.has_pulse (); }

Det er nonsens at gøre lønnen foranderlig; du bare gør det muligt for kode, der får en konstant objekt at rode med lønnen. Hvis medarbejderen er konstant, bør du ikke rode med hans løn.


Så hvad nu hvis du vil have den ansattes navn og id til at være konstant, men ikke den løn? Nå, bare sige det

class Medarbejder {public: Medarbejder (streng name = "No Name", snor id = "000-00-0000", dobbelt løn = 0): _name (navn), _id (id) {_salary = løn; } String getNavn () const {tilbagevenden _name;} string getid () const {tilbagevenden _id;} dobbelt getSalary () const {tilbage _salary;} void setSalary (dobbelt løn) {_salary = løn;} void fremme (dobbelt løn) { _salary = løn;} private: const string _name; const string _id; dobbelt _salary; };

Nu er de konstant.

Selvfølgelig betyder det at du kun kan sætte dem i konstruktøren.

Så hvis ovenstående galskab er ikke, hvad foranderlig er, hvad er det for? Her er den subtile tilfælde: foranderlig er for det tilfælde, hvor en genstand er logisk

konstant, men i praksis skal ændres. Disse sager er få og langt imellem, men de findes

Her er et eksempel:. Du har en konstant objekt, men for debugging formål vil spore, hvor ofte en konstant metode kaldes på det. Logisk du ikke ændrer objektet.

Bemærk, at hvis du gør beslutninger i dit program baseret på en foranderlig variabel, har du næsten helt sikkert overtrådt logiske constness og nødt til at genoverveje tingene

class Medarbejder {public:. Medarbejder (const std :: string & navn): _name (navn), _access_count

(0) {} void sætnavn (const std :: string & navn) {_name = navn; } Std :: string get_name () const {_access_count ++; _name tilbage; } Int get_access_count () const {tilbagevenden _access_count; } Private: std :: string _name; foranderlig int _access_count; };

Som en mere kompleks eksempel kan du ønsker at cache resultater af en dyr operation:

 class MathObject {public: MathObject (): pi_cached (falsk) {} dobbelt pi () const {if (! pi_cached) {/* Dette er en sindssygt langsom måde at beregne pi.

* /Pi = 4; for (lang trin = 3; trins

Nu har vi ikke beregne pi indtil nogen beder om det, men når de gør vi cache resultatet, hvilket er godt, fordi vi beregne det på en virkelig langsom og dum måde. Logisk funktionen er stadig const (pi handler ikke om at

Page   <<  [1] [2] [3] >>
Copyright © 2008 - 2016 Læs Uddannelse artikler,https://uddannelse.nmjjxx.com All rights reserved.