Возможный дубликат:
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
Спасибо
Это прекрасно работает:
#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;
}
Других решений пока нет …