Если ваш проект действительно большой & вы дооснащенией частного контроля члена в нее, вы можете найти полезный пойти альтернативный маршрут: Не осуществлять добытчик в все .... просто реализуйте сеттеры. Определите общедоступную ссылку const
на каждую базовую переменную частного члена, которая служит для нее «getter». Любой код, который читает эти данные, может оставаться неизменным; вам нужно только обновить код, который устанавливает эти переменные, что может быть намного менее болезненным для обновления. Если вы идете по этому пути, вы должны инициализировать эти публичные ссылки в конструкторах, как это:
class fred {
public:
fred() : stone(_stone) {} // every constructor must initialize all public references like this
void set_stone(int s) { _stone = s; }
int get_stone() { return _stone; } // Instead of this (or, in ADDITION to this), do this....
const int& stone; // const public reference to internal private data member
private:
int _stone;
}
Вы можете пойти с этим решением постоянно, или только до тех пор, пока обновления («когда-нибудь») закончить все ваши геттеры. Лично для классов, где типы данных их внутренних данных довольно очевидны & не изменится, я предпочитаю это решение в любом случае, так как код, написанный с ним, просто читать легче. I пожелал, что у C++ была функция operator classmember_setter<membername>()
, которая позволит вам написать метод setter, который будет выглядеть так же, как вы просто обращались к элементу данных вместо вызова метода на нем; что приведет к получению более чистого кода, чем при использовании методов setter.
Я не думаю, что вы можете легко изменить защиту вещей и «Найти и заменить» на них. Существует не простой способ сделать это с существующей частью проекта. –
Просто мысль: если у вас есть 100 членов данных, возможно, вам нужно реорганизовать класс контейнера и разбить его на более мелкие классы. –
Следовательно, причина, по которой вы не разрешаете доступ к вашим членам данных публично ... изменение открытого интерфейса - это PITA. –