170 похожих чатов

Class A { public: A(int x_, int y_)

: 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;
};

А такой класс нарушает инкапсуляцию ? Я в том смысле что он раскрывает детали реализации. Но вот вопрос одно ли это тоже ?
Т.е. раскрыть детали реализации == нарушить инкапсуляцию ?

36 ответов

17 просмотров

Каким образом он раскрывает детали реализации?

Да, по сути это одно и тоже

не раскрывает и не нарушает

int& getX() { return x; } --- зачем по ссылке то? Есть же set

Danya🔥
Раскрывает и нарушает

Ну это всё очень глубоко философский вопрос...

Ilya Zviagin
Ну это всё очень глубоко философский вопрос...

а какая здесь философия? открыл доступ к неконтролируемому изменению внутреннего состояния объекта - получи нарушение инкапсуляции

Смотря что понимать под инкапсуляцией С одной стороны - x и y всё ещё остаются внутри класса, они инкапсулированы

> Т.е. раскрыть детали реализации == нарушить инкапсуляцию ? Нет, не одно и то же

Danya🔥
Нет, они не инкапсулированны

Они будут инкапсулированы даже если их просто поместить в namespace

Kirill 🚜
Они будут инкапсулированы даже если их просто поме...

Ты не понимаешь что такое инкапсуляция кажется

Danya🔥
Ты не понимаешь что такое инкапсуляция кажется

У неё много определений, придерживаться какого-то одного и исключать другие - это неправильно

Ilya Zviagin
Так он может добавить контроль-то...

если он выставляет ссылку, он теряет контроль

Kirill 🚜
У неё много определений, придерживаться какого-то ...

У неё одно определение — сокрытие реализации Здесь реализация не скрывается

Короче подставь const перед int& и не будет проблем

Illia Palkin- Автор вопроса
Kirill Bolshakov
Короче подставь const перед int& и не будет пробле...

Выглядит не лучше обычной ссылки на инт

Illia Palkin
Выглядит не лучше обычной ссылки на инт

лучше - менять нельзя значение под ней

Illia Palkin- Автор вопроса
Kirill Bolshakov
лучше - менять нельзя значение под ней

Ну ссылку на инт уже такое себе возравщать. А если там какой-то класс большой, с помощью которого нужно что-то сделать, то я нарушу таким образом law of demeter

Illia Palkin- Автор вопроса
Kirill Bolshakov
кого нарушишь?

https://en.wikipedia.org/wiki/Law_of_Demeter

Illia Palkin
https://en.wikipedia.org/wiki/Law_of_Demeter

И в чём нарушение, если передавать по const T& большой класс из геттера?

Illia Palkin- Автор вопроса
Kirill Bolshakov
И в чём нарушение, если передавать по const T& бол...

Там есть секция In object-oriented programming. Что непонятного ?

Illia Palkin
Там есть секция In object-oriented programming. Чт...

Как это к твоему геттеру относится? Возврат какого-нибудь std::string это возврат свойства просто

Illia Palkin- Автор вопроса
Illia Palkin
Там есть секция In object-oriented programming. Чт...

Хорошо, а какое отношение это имеет к мультипарадигменному C++?

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Вот еще странный косяк, подскажите как бороться. Я git clone сделал себе всего embassy и примеры там запускаю. Всё хорошо. Но вот решил в cargo.toml зависимости не как в приме...
Lukutin R2AJP
2
Карта сайта