0

少し前にC++の学習を始めましたが、難しい問題があります...

オブジェクトの任意のタイプの配列をソートできる静的ライブラリを作成する必要がありますが、その方法がよくわかりません...関数のヘッダーに何を書くべきですか?

#ifndef SORTER

#define SORTER

class sorter
{

public:

    static array* bubblesort(array*,int size_t);
};

#endif

この解決策は私ができる最善の方法ですが、もちろんうまくいきません...

並べ替えたいもの:

int main()
{
    const unsigned maxEquipment=7;
    Equipment* equipments[maxEquipment];

    equipments[0]=new Equipment(1,200);
    equipments[1]=new Printer(2,12000,12000);
    equipments[2]=new Display(3,2000,6);
    equipments[3]=new Printer(4,312000,51000); ...........

注: 標準ライブラリのソーター関数は使用できません!

何をすべきか?

4

1 に答える 1

0

これは、純粋な仮想関数を持つ共通の基本クラスを提供することで実現できます。これにより、複数のオブジェクト タイプの処理について心配することなく、配列を並べ替えるための要件を適用できます。

たとえば、int値でソートしたい場合。値を取得するには、純粋な仮想を追加します。は、すべての派生クラスが強制的にメンバー関数を実装し、値を返すようにします。

class SortBase
{
public:
    virtual ~SortBase() {} // <-- required for polymorphism
    virtual int getValue() const = 0;
};

私を使用したい場合は、このクラスから継承する必要があるというバブルソートルーチンの要件を提供するために使用する基本クラスがあります。

class sorter
{
public:

    static const SortBase* bubblesort(const SortBase*,int size_t);
};

SortBase次に、クラスから継承し、実装を提供しますgetValue

class Display : public SortBase
{
public:

    Display(int value) : value_(value) {}

    virtual int getValue()
    {
        return value_;

    }
private:

    int value_;
};

あなたの例mainは以下のようになります

int main()
{
    const unsigned maxEquipment=4;
    SortBase* equipments[maxEquipment];

    equipments[0]=new Equipment(1,200);
    equipments[1]=new Printer(2,12000,12000);
    equipments[2]=new Display(3,2000,6);
    equipments[3]=new Printer(4,312000,51000);

    sorter::bubblesort(equipments, maxEquipment);

    return 0;
 }
于 2013-04-28T03:45:37.953 に答える