Ele é bobagem para fazer o salário mutável; você está apenas fazendo o possível para o código que obtém um objeto constante de mexer com o salário. Se o empregado é constante, você não deveria estar brincando com o seu salário.
Então, o que se quiser nome e ID do empregado a ser constantes, mas não é o salário? Bem, é só dizer
class Employee {public: Employee (string name = "No Name", string id = "000-00-0000", duplo salário = 0): _name (nome), _id (id) {_salary = salário; } Seqüência de getName () const {_name retorno;} getid string () const {_id retorno;} getSalary () const double {return _salary;} setSalary void (duplo salário) {_salary = salário;} vazio promover (duplo salário) { _salary = salário;} privado: const _name string; _id const string; duplo _salary; };
Agora, eles estão constante.
Claro, isso significa que você só pode configurá-los no construtor.
Então, se a loucura acima não é o que é mutável para, o que é isso? Aqui está o exemplo sutil: mutável é para o caso em que um objeto é logicamente constante, mas na prática precisa mudar. Estes casos são poucos e distantes entre si, mas eles existem Aqui está um exemplo:. Você tem um objeto constante, mas para fins de depuração deseja controlar quantas vezes um método constante é chamado sobre ele. Logicamente você não está alterando o objeto. Note que se você está tomando decisões em seu programa baseado em uma variável mutável, você quase certamente violou constness lógico e necessário repensar as coisas class Employee {public:. Empregado (std :: string const & nome): _name (nome), _access_count (0) {} set_name void (const std :: string & name) {_name = nome; } Std :: get_name string () const {_access_count ++; retornar _name; } Int get_access_count () const {_access_count retorno; } Private: std :: string _name; mutável int _access_count; }; Como um exemplo mais complexo, você pode querer armazenar em cache os resultados de uma operação cara: * /Pi = 4; para (long passo = 3; passo Agora nós não calcular pi até que al classe MathObject {public: MathObject) (: pi_cached (false) {} double pi () const {if (! pi_cached) {/* Esta é uma maneira incrivelmente lento para calcular pi.
Demonstrações ea função Javascript Eval