: x(x_), y(y_) {}
void setX(int x_) { x = x_; }
void setY(int y_) { y = y_; }
int& getX() { return x; }
int& getY() { return y; }
private:
int x;
int y;
};
А такой класс нарушает инкапсуляцию ? Я в том смысле что он раскрывает детали реализации. Но вот вопрос одно ли это тоже ?
Т.е. раскрыть детали реализации == нарушить инкапсуляцию ?
Каким образом он раскрывает детали реализации?
Я там отредактировал
Да, по сути это одно и тоже
не раскрывает и не нарушает
Раскрывает и нарушает
int& getX() { return x; } --- зачем по ссылке то? Есть же set
Это пример такой
Ну это всё очень глубоко философский вопрос...
а какая здесь философия? открыл доступ к неконтролируемому изменению внутреннего состояния объекта - получи нарушение инкапсуляции
Смотря что понимать под инкапсуляцией С одной стороны - x и y всё ещё остаются внутри класса, они инкапсулированы
Нет, они не инкапсулированны
> Т.е. раскрыть детали реализации == нарушить инкапсуляцию ? Нет, не одно и то же
Они будут инкапсулированы даже если их просто поместить в namespace
Ты не понимаешь что такое инкапсуляция кажется
Так он может добавить контроль-то...
У неё много определений, придерживаться какого-то одного и исключать другие - это неправильно
если он выставляет ссылку, он теряет контроль
У неё одно определение — сокрытие реализации Здесь реализация не скрывается
Как скажешь
Короче подставь const перед int& и не будет проблем
Да я ничего не пишу
Выглядит не лучше обычной ссылки на инт
лучше - менять нельзя значение под ней
Ну ссылку на инт уже такое себе возравщать. А если там какой-то класс большой, с помощью которого нужно что-то сделать, то я нарушу таким образом law of demeter
https://en.wikipedia.org/wiki/Law_of_Demeter
И в чём нарушение, если передавать по const T& большой класс из геттера?
Там есть секция In object-oriented programming. Что непонятного ?
Как это к твоему геттеру относится? Возврат какого-нибудь std::string это возврат свойства просто
Я и не говорю что возват std::string это плохо
Хорошо, а какое отношение это имеет к мультипарадигменному C++?
Обсуждают сегодня