*   >> Чтение Образование Статьи >> science >> programming

C ++ & Amp; # 039, S Мутабельный И Концептуальная Constness

<р> Ключевое слово изменяемые используется, чтобы позволить конкретный член данных константный объект должен быть изменен. Это особенно полезно, если большинство членов должно быть постоянным, но несколько должны быть обновляемыми. Предположим, мы добавим «Заработная плата» члена нашего класса Employee. В то время как имя сотрудника и идентификатор может быть постоянным, зарплата не должна быть. Вот это наш обновленный класс

<р> класс Сотрудник {общественности:.

Сотрудник (строка имя = "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 () {/* ... * /}}; класс Робот: публичный чело

Page   <<       [1] [2] [3] >>
Copyright © 2008 - 2016 Чтение Образование Статьи,https://ru.nmjjxx.com All rights reserved.