Поверхность фигуры shape в качестве исходного значения имеет 0.
Порожденные классы вероятно подменят эту функцию.
double shape::area()
{
return 0;
}