*   >> Lezen Onderwijs artikelen >> science >> programming

C ++ & amp; # 039; s Veranderlijk en conceptuele Constness

lse kan niet set_name bellen met (). Omdat Persoon is een referentie, kunnen we overgaan in een Robot robot en krijg het juiste antwoord (false). * /Bool take_pulse (const Person & X) {return X.has_pulse (); }

Het is onzin om het salaris veranderlijk te maken; je bent gewoon waardoor het mogelijk code die een constante object krijgt te knoeien met het salaris. Indien de werknemer is constant, moet je niet knoeien met zijn salaris.

Dus wat als je wilt dat de naam en id van de werknemer constant te zijn, maar niet het salaris? Nou, gewoon zeggen dus

class Employee {public: Werknemer (string name = "No Name" string id = "000-00-0000", dubbel salaris = 0): _name (naam), _id (id) {_salary = salaris; } Snaar getName () const {return _name;} reeks GetID () const {return _id;} dubbele getSalary () const {return _salary;} leegte setSalary (dubbel salaris) {_salary = salaris;} leegte te bevorderen (dubbel salaris) { _salary = salaris;} prive: const tekenreeks _name; const tekenreeks _id; dubbele _salary; };

Nu zijn ze constant.

Uiteraard betekent dit dat u kunt ze alleen in de constructor.

Dus als de bovenstaande waanzin is niet wat veranderlijk is, wat is het voor? Hier is de subtiele geval: veranderlijk is voor het geval een voorwerp is logisch

constant, maar in de praktijk moet veranderen. Deze gevallen zijn maar weinig tussen, maar ze bestaan ​​

Dit is een voorbeeld. Je hebt een constante object, maar voor het debuggen doeleinden wilt bijhouden hoe vaak een constante methode heet op. Logisch dat je niet van het object verandert.

Merk op dat als je het maken van beslissingen in uw programma op basis van een veranderlijke variabele, heb je bijna zeker overtreden logische constness en de noodzaak om dingen te heroverwegen

class Employee {public:. Werknemer (const std :: string & naam): _name (naam), _access_count

(0) {} leegte set_name (const std :: string & naam) {_name = naam; } Std :: string get_name () const {_access_count ++; terug _name; } Int get_access_count () const {return _access_count; } Prive: std :: string _name; veranderlijk int _access_count; };

Als complexer voorbeeld, wilt u misschien de resultaten van een dure operatie cache:

 class MathObject {public: MathObject (): pi_cached (false) {} dubbel pi () const {if (! pi_cached) {/* Dit is een waanzinnig langzame manier om pi te berekenen.

* /Pi = 4; voor (grote stap = 3; stap

Nu hebben we niet te berekenen van pi totdat iemand erom vraagt, maar w

Page   <<  [1] [2] [3] >>
Copyright © 2008 - 2016 Lezen Onderwijs artikelen,https://onderwijs.nmjjxx.com All rights reserved.