-1

重複の可能性:
C++ 配列変数をソートする方法

保護者会の電話がありました

Shape

シェイプは 2 つの子呼び出しを取得しました

Square and Rectangle

Shape クラスは int 型の変数呼び出し領域を取得しました

だから私はこのような正方形、長方形のオブジェクトを作成しました

int main()
{
    Shape *shaped[100];

    //then i did some adding of object..
    int areaValue;
    areaValue=1;

    shaped[0] = new Rectangle();
    shaped[0]->setArea(areaValue);

    areaValue=7;
    shaped[1] = new Square();
    shaped[1]->setArea(areaValue);

    areaValue=5;
    shaped[2] = new Square();
    shaped[2]->setArea(areaValue);

    shapeCounter = 3;


     sort(shaped, shaped + 3, sort_by_area());


    for (int i=0;i<shapeCounter;i++)
    {
        cout << shaped[i].getArea() << endl;
    }

}

次に、たとえばSquare.cppで

これは私がしました

struct sort_by_area
{
    static bool operator()(Shape* x, Shape* y)
    {
        return x->getArea() < y->getArea();
    }
};

上記のこのコードは機能します。領域で並べ替えることができますが、私の質問は、 struct を使用しない場合でも並べ替えることができるということです。 struct を使用しない場合、 sort_by_area がスコープで宣言されていないと表示されます。

私のmain.cppが子クラス.cppにあるソートコードにアクセスできるように、本当に構造体を使用する必要があります

ありがとう

4

1 に答える 1

5

これは完全に機能します:

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

class Shape{

private:
    int x;
public:
    void setArea(int x){
        this->x =  x;
    }
    int getArea(){
        return this->x;
    }
};

class Rectangle: public Shape{
public:
};

class Square: public Shape{
public:
};

bool sort_by_area (Shape* x,Shape* y) { return (x->getArea() < y->getArea()); }
int main()
{
    Shape *shaped[100];

    //then i did some adding of object..
    int areaValue,shapeCounter = 0;
    areaValue=1;

    shaped[0] = new Rectangle();
    shaped[0]->setArea(areaValue);

    areaValue=7;
    shaped[1] = new Square();
    shaped[1]->setArea(areaValue);

    areaValue=5;
    shaped[2] = new Square();
    shaped[2]->setArea(areaValue);

    shapeCounter = 3;


    sort(shaped, shaped + 3, sort_by_area);


    for (int i=0;i<shapeCounter;i++)
    {
        cout << shaped[i]->getArea() << endl;
    }
    return 0;
}
于 2012-11-04T07:37:13.707 に答える