我接到了家长班的电话
Shape
形状得到了 2 个孩子的电话
Square and Rectangle
Shape类有一个变量调用区,它是int类型
所以我像这样创建了一些正方形,矩形的对象
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[0],shaped[2]);
for (int i=0;i<shapeCounter;i++)
{
cout << shaped[i].getArea() << endl;
}
}
我尝试按升序排序,但它不起作用。没有位置变化,区域仍然是相同的顺序。
感谢大家的帮助!
更新:
我在 Shape.cpp 做了以下更改
bool Shape::orderByArea(const Shape* lhs, const shape* rhs)
{
return lhs->area() < rhs->area();
}
然后在 main.cpp 我做了这个
std::sort(shaped, shaped + 3, orderByArea);
但是我得到一个错误,orderByArea 没有在这个范围内声明。
我尝试的另一件事是: 使用向量进行排序
在 Shape.h
public:
bool operator<const Shape& x) const
{
return area < x.area;
}
在 main.cpp
vector<ShapeTwoD*> sortVector;
sortVector.clear();
sortVector.assign(shaped,shaped + shapeCounter);
sort(sortVector.begin(),sortVector.end());
for(int i=0;i<shapeCounter;i++)
{
cout << sortVector[i].toDisplay() << endl;
}
但似乎没有任何问题。我试着做一个打印输出它的位置是一样的。
更新:现在已修复。排序正在工作。感谢专家!
我还有一个问题是
形状 *shape[100];
我如何复制的值
Shape *shaped[100];
进入
vector<Shape> myVector;
代替
vector<Shape*> myVector;
所以我可以使用普通的对象排序。