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

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

La palabra clave mutable se utiliza para permitir que un miembro de datos particular de objeto constante de ser modificado. Esto es particularmente útil si la mayoría de los miembros debe ser constante pero algunos necesitan ser actualizable. Supongamos que añadimos un miembro de "salario" a nuestra clase Empleado. Mientras que el nombre del empleado y la identificación pueden ser constantes, el salario no debe ser. Aquí está nuestra clase actualizada

clase Empleado {public:.

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

Ahora, incluso para un objeto Employee const, el salario puede ser modificado

Empleado const juan ("Juan", "007", 5000,0).

; .... .... John.promote (20000.0);

No, no! Mil veces,! No

he visto este tipo de idea terrible antes. Este tipo de locura lleva a código erróneo y derrota a todo el propósito de const en C ++. Sólo puedo concluir que la gente que escribe este tipo de tonterías mismos no entienden el propósito de mutable. Así que enseñan un error, pasando en este sentido al siguiente grupo de programadores de C ++ que pasan sobre ellos mismos. Esto tiene que parar.


Cuando se marca una constante variable, aseguras (y pidiendo C ++ para hacer cumplir) que usted nunca modificar lógicamente el contenido de ese objeto. Tal vez la razón más útil para hacer esto es cuando se pasa un objeto en una función por referencia o puntero. Por lo que es constante, la función promete no meterse con su objeto. Por ejemplo, supongamos que tiene un Robot clase que hereda de Persona. Usted quiere pasar su robot en el take_pulse función. ¿Quieres take_pulse utilizar métodos sobrescritos del robot, por lo take_pulse lleva el objeto de referencia.

Debido a que es constante, puede estar seguro de que take_pulse no modificarán el Robot, acabo de leer de ella:

class Persona {public: has_pulse bool virtual () const {return true; } Void nombre_conjunto () {/* ... * /}}; clase Robot: Persona pública {public: has_pulse bool virtual () const {return false; } V

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