0

我有这个父类电话

Shape (ShapeTwoD.cpp)

他有2个儿童班

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

这个变量调用区域在 Rectangle 和 Square 声明,但不在 Shape(父)

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

class->getArea();


vector<ShapeTwoD*> myVector;

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

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

数组计数++;

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

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

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

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

如果我尝试这样做

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

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

我如何创建一个可以通过 getArea() 进行比较的布尔运算符重载,然后查看哪个更好 return a.getArea() > 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.
4

1 回答 1

1

1)使比较函数ShapeTwoD*作为参数,并virtual getArea在基类中有一个方法,您可以在子类中覆盖该方法。

2)制作方法getArea const

int getArea() const;

因为它在逻辑上是有意义的,所以你可以在const对象上调用它。

于 2012-10-30T21:37:43.303 回答