Итак, у меня есть базовый класс (Shape) и три производных класса: Circle, Rectangle и Square (Square получен из Rectangle). Я пытаюсь реализовать оператор ‹‹, который просто вызывает правильную функцию отображения для того, что его вызвало. Однако я не думаю, что у меня правильный синтаксис. Вот фрагмент - где я ошибся?
class Shape
{
public:
Shape(double w = 0, double h = 0, double r = 0)
{
width = w;
height = h;
radius = r;
}
virtual double area() = 0;
virtual void display() = 0;
protected:
double width;
double height;
double radius;
};
ostream & operator<<(ostream & out, const Shape & s)
{
s.display(out);
return out;
}
class Rectangle : public Shape
{
public:
Rectangle(double w, double h) : Shape(w, h)
{
}
virtual double area() { return width * height; }
virtual void display()
{
cout << "Width of rectangle: " << width << endl;
cout << "Height of rectangle: " << height << endl;
cout << "Area of rectangle: " << this->area() << endl;
}
};
display()
должен принимать в качестве параметраostream & out
и писать вout
, а не вcout
. - person Alexander Shukaev   schedule 11.05.2013