Назад к вопросам
JuniorТеорияЧасто
Что выведет программа?
#include <iostream>
struct Shape {
virtual int sides() const { return 0; }
};
struct Square : public Shape {
int sides() const override { return 4; }
};
int by_value(Shape s) { return s.sides(); }
int by_ref(const Shape& s) { return s.sides(); }
int main() { Square sq; std::cout << by_value(sq) << ' ' << by_ref(sq); }0 4
- Ждать
4 4:by_valueполучает новый объектShape, скопированный из частиShapeобъектаsq, и вызов внутриby_valueвыполняетShape::sides. - Ждать
0 0: ссылка наShapeобозначает сам объектSquare, и виртуальный вызов через неё выполняетSquare::sides.
- Что содержит параметр
by_valueи что стало с остальной частьюsq? - Как написать
Shape, чтобы вызов вродеby_value(sq)перестал компилироваться?