主要针对不同子类价值的呼叫排序

时间:2012-10-30 21:34:14

标签: c++

我有这个父类调用

Shape (ShapeTwoD.cpp)

他有2个儿童班

1 is Rectangle (Rectangle.cpp)
1 is Square (Square.cpp)

这个变量调用区域在Rectangle&方形,但不是Shape(父级)

所以我试图按区域升序排序,但区域可以通过

访问
class->getArea();


vector<ShapeTwoD*> myVector;

//在记录宽度,高度等形状的数据期间。

myVector[arrayCount] = new Rectangle();
myVector[arrayCount].setWidth(inWidth);
myVector[arrayCount].setHeight(inHeight);
myVector[arrayCount].computeArea();

arrayCount ++;

//done record width , height and then compute area of the shape

假设myVector现在包含大约2个矩形和1个方块

现在我想按区域升序对它们进行排序。

但我的getArea()函数仅在子类中可用。

如果我尝试这样做

sort(myVector.begin(),myVector.end(),funcAreaSort);

我不知道在哪里创建funcAreaSort,接下来是我如何发送子区域,假设它们是相同的形状类(矩形与矩形)或不同的形状类(矩形与形状)

我如何创建一个布尔运算符重载,可以通过getArea()进行比较,然后看看哪个更好返回a.getArea()&gt; b.getArea()并对myVector进行排序

问题是我在哪里创建这些函数我想在main.cpp上使它成为一个免费的方法但是我没有把事情排序并且编译时出现错误,如限定符错误

error: passing 'const shapeTwoD' as 'this' argument of 'virtual double shapeTwoD::getArea()' discards qualifers.
error: passing 'const shapeTwoD' as 'this' argument of 'virtual double shapeTwoD::getArea()' discards qualifers.

1 个答案:

答案 0 :(得分:1)

1)使比较函数以ShapeTwoD*为参数,并在基类中使用virtual getArea方法,在子类中重写。

2)制作方法getArea const

int getArea() const;

因为它在逻辑上是有意义的&amp;这样你就可以在const个对象上调用它。