У меня есть базовый абстрактный класс Shapes и 3 производных класса от Circle Square и Rectangle.После расчета площадей всех форм я должен их отсортировать.У меня возникают трудности с использованием std :: sort в библиотеке для сортировки, так как мои Shapes - абстрактный класс.Надеюсь, кто-то может указать мне правильное направление того, что я делаю неправильно.
Я попытался перегрузить оператор, объявив свою собственную функцию компаратора.
#define MAX 100
class ShapeTwoD
{
protected:
string name;
double area;
public:
ShapeTwoD() {}
ShapeTwoD(string name, double area);
virtual ~ShapeTwoD() {}
string getName();
virtual string toString();
virtual double getArea() = 0;
virtual void setArea(double area) = 0;
virtual double computeArea() = 0;
};
bool sortAsc(ShapeTwoD *s1, ShapeTwoD *s2)
{
return s1->getArea() < s2->getArea();
}
class Square: public ShapeTwoD
{
public:
Square() {}
Square(string name, double area);
~Square() {}
virtual double getArea();
virtual void setArea(double area);
virtual string toString();
virtual double computeArea();
};
int main()
{
ShapeTwoD * ShapeArray[MAX];
string name;
double area;
int Shapeindex;
for( int i = 0; i < 10; i++)
{
cin << name;
cin << area;
if (name == "Square" || name == "square")
{
ShapeArray[Shapeindex] = new Square(name, area);
}
Shapeindex++;
}
sort(ShapeArray, ShapeArray + MAX, sortAsc);
}
Фактический результат приведенного выше кода: Ошибка нарушения прав доступа для чтения, я предполагаю, что это происходит потому, что я пытаюсь прочитать область из моего абстрактного класса вместо моего производного класса.