Несколько вопросов о методах доступа на С++ были заданы на SO, но никто не смог удовлетворить мое любопытство по этой проблеме.
Я стараюсь избегать аксессуаров, когда это возможно, потому что, подобно Stroustrup и другим известным программистам, я считаю класс со многими из них признаком плохого OO. В С++ я могу в большинстве случаев добавить дополнительную ответственность к классу или использовать ключевое слово friend, чтобы избежать их. Однако в некоторых случаях вам действительно нужен доступ к определенным членам класса.
Существует несколько возможностей:
1. Не используйте аксессоры вообще
Мы можем просто сделать соответствующие переменные-члены общедоступными. Это не работает в Java, но, похоже, все в порядке с сообществом С++. Тем не менее, я немного обеспокоен случаем, когда явная копия или ссылка только на чтение (const) на объект, который должен быть возвращен, преувеличен?
2. Использовать методы get/set в стиле Java
Я не уверен, что это вообще из Java, но я имею в виду это:
int getAmount(); // Returns the amount
void setAmount(int amount); // Sets the amount
3. Используйте целевые методы get/set для C-стиля
Это немного странно, но, видимо, все чаще:
int amount(); // Returns the amount
void amount(int amount); // Sets the amount
Чтобы это сработало, вам нужно будет найти другое имя для вашей переменной-члена. Некоторые люди добавляют символ подчеркивания, другие - "m_". Мне тоже не нравится.
Какой стиль вы используете и почему?