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

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

век {общественности: виртуальный BOOL has_pulse () {строительства вернуться ложным; } Недействительным set_name () {/* ... * /}}; /* Поскольку Личность строительства, take_pulse не могу назвать set_name (). Потому что лицо является ссылкой, мы можем передать в Robot робота и получить правильный ответ (ложь). * /BOOL take_pulse (строительства Человек и X) {вернуться X.has_pulse (); }

<Р> Это нонсенс, чтобы зарплата изменяемые; Вы только что делает его возможным для кода, который получает постоянную объект возиться с зарплатой.

Если работник является постоянным, вы не должны быть возиться с его заработной платы.

<Р> Так что, если вы хотите имя сотрудника и идентификатор постоянной, но не зарплату? Ну, просто не так сказать

<р> класс Сотрудник {общественности: Сотрудник (строка имя = "No Name", строку ID = "000-00-0000", дважды зарплата = 0): _name (имя), _id (ID) {_salary = зарплата; } Строка GetName () строительства {возвращение _name;} Строка GetID () строительства {возвращение _id;} дважды getSalary () строительства {вернуться _salary;} недействительным setSalary (двойной оклад) {_salary = зарплата;} недействительным содействия (двойной оклад) { _salary = зарплата;} частные: строительства строка _name; строительства строка _id; двойной _salary; };

<р> Теперь они постоянны.

Конечно, это означает, что вы можете только установить их в конструкторе.

<Р> Таким образом, если выше безумие не то, что изменяемые для, то, что это? Вот тонкое дело: изменяемый для случае, когда объект является логически

постоянным, но на практике нужно изменить. Эти случаи редки, но они существуют

<р> Вот один из примеров:. У вас есть постоянный объект, но для отладки хотите, чтобы отслеживать, как часто постоянная метод называется на ней. Логически вы не меняя объект.

Обратите внимание, что если вы делаете решения в вашей программе на основе изменяемой переменной, вы почти наверняка нарушило логическую константность и нужно переосмыслить вещи

<р> класс Сотрудник {общественности:. Сотрудник (STD :: строительства строка & имя): _name (имя), _access_count

(0) {} недействительным set_name (STD :: строительства строка и имя) {_name = имя; } STD :: строка get_name () {строительства _access_count ++; вернуться _name; } INT get_access_count () {возвращение строительства _access_count; } Частные: STD :: строка _name; изменяемые INT _access_count; };

<р> В качестве более сложного примера, вы, возможно, захотите, чтобы кэшировать результаты в д

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