*   >> lukeminen koulutus Artikkelit >> science >> programming

C ++ & amp; # 039; s vaihteleva ja käsitteellinen Constness

avainsana vaihteleva käytetään sallia jonkin tietyn datan jäsen const esine muutettava. Tämä on erityisen hyödyllistä, jos suurin osa jäsenistä on vakio mutta muutaman täytyy olla päivitettävissä. Oletetaan lisäämme "palkka" jäsen meidän Työsuhde luokka. Vaikka työntekijä nimi ja id voi olla vakio, palkkaa ei pitäisi olla. Tässä on meidän päivitetään luokka.


class Työntekijä {julkinen: Työntekijä (string name = "No Name", string id = "000-00-0000", kaksinkertainen palkka = 0): _name (nimi), _ID (id) {_salary = palkka; } String getName () const {paluu _name;} void setName (String nimi) {_name = nimi;} merkkijono getid () const {paluu _ID;} void setid (string id) {_ID = id;} kaksinkertainen getSalary () const {palata _salary;} void setSalary (double palkka) {_salary = palkka;} void edistää (double palkka) const {_salary = palkka;} yksityinen: merkkijono _name; merkkijono _ID; epävakainen kaksinkertainen _salary; };

Nyt, jopa const Työntekijä esine, palkka voidaan muuttaa.


vakio Työntekijä John ("John", "007", 5000,0); .... .... John.promote (20000,0);

Ei, ei! Tuhat kertaa, ei!

Olen nähnyt tällaista kauhea idea ennen. Tällainen hulluutta johtaa virheellinen koodi ja sotii koko tarkoituksena const C ++. Voin vain todeta, että ihmiset kirjallisesti tällaista hölynpölyä itse eivät ymmärrä tarkoitusta vaihteleva. Joten he opettavat virheen, kulkee tämän hölynpölyä seuraavaan ryhmään C ++ ohjelmoijille, jotka sitä tule itse. Tämä on loputtava.


Kun merkitset muuttujan const, olet lupaavia (ja pyytää C ++ valvoa), että et koskaan loogisesti muokata sisältöä että esine. Ehkä hyödyllisin syy tähän on, kun ohitat objektin toiminto viittaamalla tai osoitin. Tekemällä const, toiminto lupaa sotkea objektin. Oletetaan esimerkiksi, että sinulla on luokka robotti, joka perii Henkilö. Haluat välitän Robot osaksi toiminto take_pulse. Haluat take_pulse käyttää Robotin yliohjatut menetelmiä, joten take_pulse vie kohde viittaamalla.

Koska se on const, voit olla varma, että take_pulse ei muuta robotti, vain lukea siitä:

class Henkilö {julkinen: virtuaalinen BOOL has_pulse () const {return true; } Void joukon_nimi () {/* ... * /}}; luokka Robot: julkinen Henkilö {julkinen: virtuaalinen BOOL has_pulse () const {return false; } Void joukon_nimi () {/* ... * /}}; /* Koska Henkilö on vakio, take_pulse ei voi soittaa joukon_nimi ().

Koska henkilö on viittaus, voimme kulkea robotti robotti ja saada oikea vastaus (false)

Page   <<       [1] [2] [3] >>
Copyright © 2008 - 2016 lukeminen koulutus Artikkelit,https://koulutus.nmjjxx.com All rights reserved.