Предотвратить доступ функции друга к частному члену класса

Как мы можем предотвратить доступ функции друга к частному члену класса. Можем ли мы вообще это сделать?

Этот вопрос был задан в интервью, и он был уверен, что это можно сделать, он намекнул на объект функтора/функции. Пока ничего не могу придумать. Жду ответа, если он есть.


person Pervez Alam    schedule 06.03.2017    source источник
comment
Не делать функцию friend класса?   -  person Some programmer dude    schedule 06.03.2017
comment
pimpl? Самое близкое, что я могу представить.   -  person felix    schedule 06.03.2017
comment
Я не понимаю таких вопросов о код-гольфе в интервью. Какую информацию такие вопросы дают о интервьюируемом, что будет полезно в той роли, на которую он претендует? Единственной целью friend является предоставление доступа к private членам.   -  person Algirdas Preidžius    schedule 06.03.2017
comment
Думаю, они хотят проверить знание ООП. Может быть и какое-то хорошее приложение, но я никогда не буду поощрять подобные вещи в своей кодовой базе.   -  person Pervez Alam    schedule 06.03.2017
comment
Единственный ответ, который я мог дать на такой вопрос на собеседовании: извините, я не думаю, что подхожу для этой компании.   -  person Emerald Weapon    schedule 06.03.2017
comment
@felix Как в этом помогает идиома pimpl, если только не введены анонимные пространства имен?   -  person πάντα ῥεῖ    schedule 06.03.2017
comment
У меня есть серьезные сомнения, что это можно сделать. Легче получить доступ к закрытому участнику (да, это можно сделать, см. это), а не блокировать доступ после его предоставления.   -  person vsoftco    schedule 06.03.2017
comment
@ πάνταῥεῖ Это не помогает, но может быть ответом, которого ожидает интервьюер, даже если это не ответ на вопрос, который он на самом деле задает. (Однажды одного парня спросили о том, как предотвратить пользовательский код от memcpy к синглтону...)   -  person felix    schedule 06.03.2017


Ответы (2)


Как мы можем предотвратить доступ функции друга к частному члену класса. Можем ли мы вообще это сделать?

Нет, ты не можешь.

Как только что-то объявлено как friend вашего класса, открываются двери для доступа к любым private членам.

person πάντα ῥεῖ    schedule 06.03.2017

Идея инкапсуляции заключается в объединении данных и методов (которые работают с данными) вместе и ограничении доступа к закрытым элементам данных вне класса. В C++ дружественная функция или дружественный класс также могут обращаться к закрытым элементам данных.

person shubham dohare    schedule 06.03.2017