Если у меня есть такой класс,
class Sample
{
private:
int X;
};
Тогда мы не можем получить доступ к X извне, так что это незаконно,
Sample s;
s.X = 10; // error - private access
Но мы можем сделать его доступным без редактирования класса ! Все, что нам нужно сделать, это,
#define private public //note this define!
class Sample
{
private:
int X;
};
//outside code
Sample s;
s.X = 10; //no error!
Рабочий код на ideone: http://www.ideone.com/FaGpZ
Это означает, что мы можем изменить спецификаторы доступа, задав такие макросы непосредственно перед определением класса или перед #include <headerfile.h>
,
#define public private //make public private
//or
#define protected private //make protected private
//or
#define so on
Разве это не проблема с C ++ (макросы / спецификаторы доступа / что угодно)?
В любом случае, смысл этой темы:
Используя макросы, мы можем легко нарушить инкапсуляцию. Спецификаторы доступа не являются надежными! Я прав?