我有这个家长班的电话

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();


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()> 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)使比较函数以ShapeTwoD*作为参数,并在基类中具有virtual getArea方法,您可以在子类中覆盖该方法。

2)使方法getArea const

int getArea() const;


因为从逻辑上讲&是合理的,所以您可以在const对象上调用它。

10-05 18:25