C ++ поддерживает технику программирования, называемую полиморфизмом. То есть производный класс может выглядеть как базовый класс для другого кода, который ничего не знает о производных классах. Взгляните на его пример:
class Shape
{
public:
virtual float Area () const = 0;
};
class Rectangle: public Shape
{
public:
Rectangle (float width, float height)
: m_width(width)
, m_height(height)
{}
virtual float Area () const
{
return m_width * m_height;
}
private:
float m_width;
float m_height;
};
class Circle: public Shape
{
public:
Circle (float radius)
: m_radius(radius)
{}
virtual float Area () const
{
return 3.141592653f*(m_radius*m_radius);
}
private:
float m_radius;
};
Теперь вы можете видеть из этого кода, что мы создали базовый класс Shape (наш интерфейс) и два производных класса, которые специализируют этот класс, один прямоугольник, другой круг. Теперь давайте создадим функцию, которая распечатывает область формы:
void PrintArea (const Shape& shape)
{
printf("Area of shape = %f",shape.Area());
}
Эта функция не заботится, является ли она прямоугольником. Или его волнует то, что ему передана форма, и вы можете получить его площадь независимо от типа.
Итак, этот код использует эту функцию:
Rectangle r (5.0f,4.0f);
Circle c (25.0f);
PrintArea(r); // Print the area of the rectangle
PrintArea(c); // Print the area of the circle
Надеюсь, это поможет.