A
Size: a a a
A
CD
class Some {
private:
int data; //участвует в вычислении размера
virtual void poly(); //добавляется в таблицу виртуальных функций
void nonpoly(); //декларирована только потому, что нужен доступ в приватные данные
public:
friend operator << (std::istream&, Some); //декларирована только потому, что нужен доступ в приватные данные
};
class Some {
private:
int data; //участвует в вычислении размера
virtual void poly(); //добавляется в таблицу виртуальных функций
};
namespace class Some::private {
void nonpoly(this Some& self);
}
//some.cpp
namespace class Some::private {
namespace {
void nonpoly_detail(this Some& self) {}
}
void nonpoly(this Some& self) {
self.nonpoly_detail();
}
}
O
class Some {
private:
int data; //участвует в вычислении размера
virtual void poly(); //добавляется в таблицу виртуальных функций
void nonpoly(); //декларирована только потому, что нужен доступ в приватные данные
public:
friend operator << (std::istream&, Some); //декларирована только потому, что нужен доступ в приватные данные
};
class Some {
private:
int data; //участвует в вычислении размера
virtual void poly(); //добавляется в таблицу виртуальных функций
};
namespace class Some::private {
void nonpoly(this Some& self);
}
//some.cpp
namespace class Some::private {
namespace {
void nonpoly_detail(this Some& self) {}
}
void nonpoly(this Some& self) {
self.nonpoly_detail();
}
}
CD
O
#define private public
мы хотя бы формально защищены стандартом, поскольку это UB из-за дефайна ключевого слова и из-за ODR violation. А тут мы прямо таки выдаём новый инструмент, чтобы стрелять стало ещё удобнее и чтобы нас вообще только честное слово останавливало от стрельбы по себе жеCD
#define private public
мы хотя бы формально защищены стандартом, поскольку это UB из-за дефайна ключевого слова и из-за ODR violation. А тут мы прямо таки выдаём новый инструмент, чтобы стрелять стало ещё удобнее и чтобы нас вообще только честное слово останавливало от стрельбы по себе жеCD
ГH
АР
АР
АР
O
namespace class Some::private {
void nonpoly(this Some& self);
}
АР
CD
namespace class Some::private {
void nonpoly(this Some& self);
}
O
CD
A
AP
F