【发布时间】:2012-10-20 07:38:13
【问题描述】:
我有这个父类调用
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() 进行比较,然后查看哪个更好返回 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.
【问题讨论】:
-
很难理解您的帖子,但错误可能告诉您
getArea()需要是const方法。该错误也与您所说的不兼容。 -
myVector.computeArea();是如何编译的?那是std::vector吗?如果是这样,它没有computeArea方法... -
@Lirik,我只是将 computeArea 作为它的一个函数放在 child 下,然后将它运行到 setArea 。目的是显示 myVector[arrayCount] 中有一些区域
-
@juanchopanza 我应该在哪里将 getArea 的 const 放在 ShapeTwoD 中,它是用于声明的 virtual double getArea const 吗,对于构造函数是 virtual double ShapeTwoD::getArea() const { }
标签: c++