我有这个家长班的电话
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
对象上调用它。