*   >> Lectura Educación Artículos >> science >> programación

C ++ & amp; # 039; s Mutable y conceptuales Constness

oid nombre_conjunto () {/* ... * /}}; /* Debido persona es const, take_pulse no puede llamar nombre_conjunto (). Debido a persona es una referencia, podemos pasar de un robot Robot y obtenemos la respuesta correcta (falso). * /Int take_pulse (const Persona & X) {return X.has_pulse (); }

Es una tontería para que el salario mutable; usted está haciendo posible que el código que obtiene un objeto constante de meterse con el salario. Si el empleado es constante, no deberías estar metiendo con su salario.


¿Y qué si desea escuchar el nombre y la identificación del empleado a ser constante, pero no el salario? Bueno, sólo dilo

clase Empleado {public: Employee (string name = "No Name", string id = "000-00-0000", doble sueldo = 0): _name (nombre), _id (id) {_salary = salario; } String getName () const {_name retorno;} getId string () const {_id retorno;} doble getSalary () const {return _salary;} void setSalary (doble sueldo) {_salary = salario;} void promover (doble sueldo) { _salary = salario;} privada: _name const string; _id const string; _salary doble; };

Ahora son constantes.

Por supuesto, esto significa que sólo se puede establecer en el constructor.

Así que si la locura anterior no es lo mutable es de, ¿para qué sirve? Aquí está el caso sutil: mutable es para el caso en que un objeto es

lógicamente constante, pero en la práctica tiene que cambiar. Estos casos son pocos y distantes entre sí, pero existen

Aquí está un ejemplo:. Usted tiene un objeto constante, pero para depurar propósitos desea realizar un seguimiento de cómo a menudo se llama un método constante en él. Lógicamente no estás cambiando el objeto.

Tenga en cuenta que si usted está tomando decisiones en su programa sobre la base de una variable mutable, que ha casi seguro que violó constness lógica y la necesidad de repensar las cosas

clase Empleado {public:. Empleado (std :: const string & nombre): _name (nombre), _access_count

(0) {} void nombre_conjunto (std :: const string & nombre) {_name = nombre; } Std :: get_name string () const {_access_count ++; volver _name; } Int get_access_count () const {_access_count retorno; } Private: _name std :: string; int _access_count mutable; };

Como un ejemplo más complejo, es posible que desee almacenar en caché los resultados de una operación costosa:

 clase MathObject {public: MathObject) (: pi_cached (false) {} doble pi () const {if (! pi_cached) {/* Esta es una

Page   <<  [1] [2] [3] >>
Copyright © 2008 - 2016 Lectura Educación Artículos,https://lectura.nmjjxx.com All rights reserved.