【问题标题】:Calling Sort on Main Against Different Child Class Value针对不同的子类值在 Main 上调用排序
【发布时间】: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++


【解决方案1】:

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

2) 制作方法getAreaconst:

int getArea() const;

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

【讨论】:

  • 我确实尝试让 getArea() 加倍,但我的 compareArea 函数应该如何编码。有更多信息会很棒。尝试了几个小时,但仍然无法完成排序。
猜你喜欢
  • 2012-02-16
  • 2016-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-26
  • 2014-08-29
  • 1970-01-01
  • 2012-04-12
相关资源
最近更新 更多