Еще одно открытие для меня в языке C++, которым пользуюсь уже больше 30 лет:
class Outer { struct Inner { int m_a{}; int m_b{}; }; public: Inner m_i; }; int main() { Outer o; o.m_i.m_a = 3; o.m_i.m_b = 4; } |
Оказывается, так можно. Цынк.
Что меня выморозило в этом примере: мы же класс Inner сделали закрытым вложенным классом для Outer. Т.е. вроде как, по логике вещей, классом Inner могут пользоваться только сам Outer и его друзья.
Но ничего нам не запрещает объявить в Outer публичный член Outer::m_i приватного, вроде бы, типа Outer::Inner. И любой желающий может работать с таким объектом приватного типа Outer::Inner.
Впервые с таким столкнулся. Я, честно говоря, ожидал, что компилятор не должен позволить объявить публичный Outer::m_i. Но, в очередной раз, ошибся 🥴
На правах саморекламы: изобретаю велосипеды для себя, могу изобретать и для вас.