#
- Ключевое слово `explicit`. Зачем нужны `explicit` конструкторы
- зачем `auto&&`
```cpp
for (auto&& s : shapes)
{
s->draw(qp);
}
```
- порассуждать, что с этим кодом не так
```cpp
for (auto&& s : m_frame->shapes)
{
try
{
dynamic_cast<Circle&>(*s);
out << "Circle" << endl;
}
catch (std::bad_cast) {}
try
{
dynamic_cast<Rectangle&>(*s);
out << "Rectangle" << endl;
}
catch (std::bad_cast) {}
try
{
dynamic_cast<Triangle&>(*s);
out << "Triangle" << endl;
}
catch (std::bad_cast) {}
s->color().getRgb(&r, &g, &b, &a);
out << r << ' ' << g << ' ' << b << ' ' << a << ' ' << s->pos().x() << ' ' << s->pos().y() << ' ' << s->size().width() << ' ' << s->size().height() << endl;
}
```
- порассуждать как можно покраше написать серриализацю, десериализацию
- раз уж в коде сплошь и рядом используется `noexcept`, рассказать про спецификатор `noexcept`, оператор `noexcept`, в чем отличие от спецификации исключений через `throw()`