gpt4 book ai didi

c++ - 针对不同的子类值调用 Main 上的排序

转载 作者:行者123 更新时间:2023-11-28 07:53:57 24 4
gpt4 key购买 nike

我有这个父类电话

Shape (ShapeTwoD.cpp)

他有2个 child 类

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,接下来是我如何发送子区域,假设它们是相同的形状类(矩形对矩形)还是不同的形状类(矩形对形状)

我如何创建一个 bool 运算符重载,它可以通过 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 方法,您可以覆盖该方法在 children 身上。

2) 使方法 getArea const:

int getArea() const;

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

关于c++ - 针对不同的子类值调用 Main 上的排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13147899/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com