Должны ли экземпляры использовать сеттеры / геттеры для доступа к своим частным элементам данных?
Начиная с каждого вводного урока программирования, нас учат использовать методы доступа и сеттеры, а не раскрывать внутреннюю работу класса. Студенты изучают смысл упражнения на более поздний день, но теперь я понимаю, что такая практика (A) не позволяет реализации стать частью экспортируемого по контракту API, (B) улучшает инкапсуляцию и сокрытие данных, а (C) позволяет гарантировать, что определенные операции должны происходить (увеличивать счетчик, регистрировать что-либо и т. д.) всякий раз, когда переменная установлена или доступна.
Как насчет использования getter / setters из самого экземпляра? Например,
class A {
private:
int number = 43;
public:
int getNumber();
void setNumber(int);
};
Когда дело доходит до этого, это действительно имеет значение? Есть ли какие-то руководящие принципы, которым мы можем следовать, или было что-нибудь написано по этому сценарию? Этот вопрос часто возникает у меня в голове, когда я программирую, но я никогда не видел, чтобы кто-нибудь обсуждал методы доступа / мутаторы в отношении самого экземпляра.
Спасибо!