класс — C ++ Сортировка массива указателей на объекты

Возможный дубликат:
C ++, как сортировать переменную массива

Я получил вызов родительского класса

Shape

Shape получил 2 детских звонка

Square and Rectangle

Класс Shape получил переменную область вызова, которая имеет тип int

Итак, я создал некоторый объект Square, Rectangle, как это

int main()
{
Shape *shaped[100];

//then i did some adding of object..
int areaValue;
areaValue=1;

shaped[0] = new Rectangle();
shaped[0]->setArea(areaValue);

areaValue=7;
shaped[1] = new Square();
shaped[1]->setArea(areaValue);

areaValue=5;
shaped[2] = new Square();
shaped[2]->setArea(areaValue);

shapeCounter = 3;sort(shaped, shaped + 3, sort_by_area());for (int i=0;i<shapeCounter;i++)
{
cout << shaped[i].getArea() << endl;
}

}

Тогда, например, на Square.cpp

я сделал это

struct sort_by_area
{
static bool operator()(Shape* x, Shape* y)
{
return x->getArea() < y->getArea();
}
};

Этот код выше работает. и может сортировать по области, но мой вопрос в том, могу ли я все еще сортировать, если я не использую struct, потому что, если я не использую struct, он скажет, что sort_by_area не объявлен в области видимости.

Должен ли я действительно использовать struct, чтобы мой main.cpp мог получить доступ к коду сортировки, расположенному в дочернем классе .cpp

Спасибо

-1

Решение

Это прекрасно работает:

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

class Shape{

private:
int x;
public:
void setArea(int x){
this->x =  x;
}
int getArea(){
return this->x;
}
};

class Rectangle: public Shape{
public:
};

class Square: public Shape{
public:
};

bool sort_by_area (Shape* x,Shape* y) { return (x->getArea() < y->getArea()); }
int main()
{
Shape *shaped[100];

//then i did some adding of object..
int areaValue,shapeCounter = 0;
areaValue=1;

shaped[0] = new Rectangle();
shaped[0]->setArea(areaValue);

areaValue=7;
shaped[1] = new Square();
shaped[1]->setArea(areaValue);

areaValue=5;
shaped[2] = new Square();
shaped[2]->setArea(areaValue);

shapeCounter = 3;sort(shaped, shaped + 3, sort_by_area);for (int i=0;i<shapeCounter;i++)
{
cout << shaped[i]->getArea() << endl;
}
return 0;
}
5

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]