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