Избегайте тривиальных геттеров и сеттеров
Причина
Тривиальный геттер или сеттер не добавляет семантической ценности; элемент данных мог бы быть просто public.
Пример
class Point { // Плохо: многословно
int x;
int y;
public:
Point(int xx, int yy) : x{xx}, y{yy} { }
int get_x() const { return x; }
void set_x(int xx) { x = xx; }
int get_y() const { return y; }
void set_y(int yy) { y = yy; }
// нет функций членов поведения
};
Рассмотрите возможность сделать такой класс struct -- то есть, бесполезный набор переменных, все данные открыты и нет функций членов.
struct Point {
int x {0};
int y {0};
};
Обратите внимание, что мы можем поместить инициализаторы по умолчанию на членов данных: C.49: Предпочитайте инициализацию присваиванию в конструкторах.
Примечание
Ключом к этому правилу является вопрос о том, является ли семантика геттера/сеттера тривиальной. Хотя это не полное определение "тривиального", подумайте, была ли бы какая-либо разница сверх синтаксиса, если бы геттер/сеттер был открытым членом данных. Примеры нетривиальной семантики включали бы: поддержание инварианта класса или преобразование между внутренним типом и типом интерфейса.
Применение
Отмечайте несколько функций членов get и set, которые просто получают доступ к члену без дополнительной семантики.