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 回答