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

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

Het sleutelwoord veranderlijk wordt gebruikt om een ​​bepaalde data lid van const object dat moet worden gewijzigd. Dit is vooral handig als de meeste leden constant moet zijn maar een paar moeten worden bijgewerkt worden. Stel dat we een "salaris" lid toe te voegen aan onze Employee klasse. Hoewel de naam en id medewerker constant mogelijk moet salaris niet. Hier is onze vernieuwde klasse

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;} leegte setName (naam string) {_name = naam;} snaar GetID () const {return _id;} leegte setid (string id) {_id = id;} dubbele getSalary () const {return _salary;} leegte setSalary (dubbel salaris) {_salary = salaris;} leegte te bevorderen (dubbel salaris) const {_salary = salaris;} prive: string _name; touwtje _id; veranderlijk dubbele _salary; };

Nu, zelfs voor een const Employee object, het salaris kan worden aangepast

const Employee john ("Jan", "007", 5000,0).

; .... .... John.promote (20.000,0);

Nee, nee! Een duizend keer, nee!

Ik heb dit soort vreselijk idee eerder gezien. Dit soort waanzin leidt tot gebrekkig code en verslaat het hele doel van const in C ++. Ik kan alleen maar concluderen dat de mensen die het schrijven van dit soort onzin zelf niet begrijpen het doel van veranderlijk. Zodat ze leren een fout, het doorgeven van deze onzin naar de volgende groep van C ++ programmeurs die doorgeven aan zichzelf. Dit moet stoppen.

Als u een variabele const markeren, u zijn veelbelovend (en vragen C ++ te dwingen) dat u de inhoud van dat object nooit logisch zal wijzigen. Misschien wel de meest nuttige reden om dit te doen is wanneer u een object in een functie voorbij referentie of pointer. Doordat het const, de functie belooft te knoeien niet met uw object. Bijvoorbeeld, zeggen dat je een klasse robot die erft van Persoon. U wilt uw Robot overgaan in de functie take_pulse. U wilt take_pulse om overschreven methoden Robot gebruiken, zodat take_pulse neemt het object door verwijzing.

class Person {public:: Omdat het const, kunt u erop vertrouwen dat take_pulse de Robot, net gelezen uit het niet zal veranderen zijn virtuele bool has_pulse () const {return true; } Leegte set_name () {/* ... * /}}; Robot klasse: public Persoon {public: virtual bool has_pulse () const {return false; } Leegte set_name () {/* ... * /}}; /* Omdat Persoon is const, take_pu

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