<р> класс Сотрудник {общественности:.
Сотрудник (строка имя = "No Name", строку ID = "000-00-0000", дважды зарплата = 0): _name (имя), _id (ID) {_salary = зарплата; } Строка GetName () строительства {возвращение _name;} недействительным SetName (имя строка) {_name = имя;} Строка GetID () строительства {возвращение _id;} недействительным SETID (строка ID) {_id = ID;} дважды getSalary () строительства {вернуться _salary;} недействительным setSalary (двойной оклад) {_salary = зарплату;} недействительным содействия (двойной оклад) сопзЬ {_salary = зарплату;} частные: строка _name; Строка _id; изменяемые дважды _salary; };
<р> Теперь, даже для константный объект Employee, зарплата может быть изменена
<р> строительства Сотрудник Джон ("Джон", "007", 5000.
0). .... .... John.promote (20000.0);
<р> Нет, нет! Тысячу раз нет!
<Р> Я видел этот вид страшной идее раньше. Это своего рода безумие, приводит к ошибочном коде и побеждает всю цель постройки в C ++. Я могу только сделать вывод, что люди, пишущие этот вздор сами не понимают цель изменяемые. Так они учат ошибку, проходя по этой ерундой следующей группе C ++ программистов, которые проходят его на себя. Это должно остановиться.
<Р> Когда вы отмечаете переменной сопзЬ, вы подтверждаете (и просят C ++ для обеспечения), что вы никогда не будете логически изменять содержимое этого объекта. Возможно, самый полезный причина сделать это, когда вы передаете объект в функцию по ссылке или указателю. Делая это строительства, функция обещает не возиться с вашего объекта. Например, у вас есть класс Robot, который наследует от Person. Вы хотите, чтобы передать ваши робот в функции take_pulse. Вы хотите take_pulse использовать перегруженные методы робота, так take_pulse принимает объект по ссылке.
Потому что это строительства, вы можете быть уверены, что take_pulse не будет изменять робота, просто читать из него:
<р> класс Человек {общественности: виртуальный BOOL has_pulse () сопзЬ {вернуть верно; } Недействительным set_name () {/* ... * /}}; класс Робот: публичный чело