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

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

Nøgleordet foranderlig bruges til at tillade en bestemt data medlem af const objekt, der skal ændres. Dette er især nyttigt, hvis de fleste af medlemmerne skal være konstant, men et par skal være opdaterbare. Antag at vi tilføjer en "løn" for at vores Medarbejder klasse. Mens navn og id medarbejder kan være konstant, bør løn ikke være. Her er vores opdaterede klasse

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;} void setName (string navn) {_name = navn;} string getid () const {tilbagevenden _id;} void SETID (string id) {_id = id;} dobbelt getSalary () const {returnere _salary;} void setSalary (dobbelt løn) {_salary = løn;} void fremme (dobbelt løn) const {_salary = løn;} private: string _name; string _id; foranderlig dobbelt _salary; };

Nu, selv for en const Medarbejder objekt, lønnen kan ændres

const Medarbejder john ("John", "007", 5000,0).

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

Nej, nej! Tusind gange, nej!

Jeg har set denne slags forfærdelige idé før. Denne form for galskab fører til fejlbehæftet kode og nederlag hele formålet med konst i C ++. Jeg kan kun konkludere, at folk skriver den slags nonsens ikke selv forstå formålet med foranderlig. Så de underviser en fejl, der passerer på denne nonsens til den næste gruppe af C ++ programmører, der passerer det på sig selv. Dette skal stoppe.


Når du markerer en variabel const, du er lovende (og beder C ++ til at håndhæve), som du aldrig vil logisk ændre indholdet af det pågældende objekt. Måske den mest nyttige grund til at gøre dette er, når du passerer et objekt i en funktion ved henvisning eller pointer. Ved at gøre det const, funktionen lover at ikke rod med dit objekt. For eksempel sige, at du har en klasse robot, der arver fra Person. Du ønsker at videregive din robot i funktionen take_pulse. Du ønsker take_pulse bruge Robot s tilsidesatte metoder, så take_pulse tager genstanden ved henvisning.

Fordi det er const, kan du være sikker på, at take_pulse ikke vil ændre Robot, bare læse fra det:

class Person {public: virtual bool has_pulse () const {return true; } Void sætnavn () {/* ... * /}}; klasse Robot: offentlig Person {public: virtual bool has_pulse () const {return false; } Void sætnavn () {/* ... * /}}; /* Fordi Person er const, take_pulse kan ikke kalde sætnavn (). Fordi person er en

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