C ++纯虚方法,接口本身作为参数

时间:2014-07-26 03:30:43

标签: c++ virtual

我正在实施快速排序算法。我有一个界面

class Comparable{
public:
    virtual int compareTo(Comparable *c)=0;
};

现在我有一个名为ComparableInt的类,它实现了Comparable:

class ComparableInt: public algorithm::Comparable{
public:
    int value;
    int compareTo(Comparable *i) {
        ComparableInt *c = dynamic_cast<ComparableInt*>(i);
        return value - (*c).value;
    };
    ComparableInt(int i):value(i){};
};

我的问题是,这是正确的方法吗?我试着像这样实现它:

class ComparableInt: public algorithm::Comparable{
public:
    int value;
    int compareTo(ComparableInt *i) {
        return value - (*i).value;
    };
    ComparableInt(int i):value(i){};
};

但似乎这个int compareTo(ComparableInt * i)不是virtual int compareTo(Comparable * c)的实现,所以我必须进行动态转换。寻求你的帮助!

1 个答案:

答案 0 :(得分:0)

试试这个:

template<typename T>
class Comparable
{
public:
    virtual int compareTo(Comparable<T> *c) = 0;
    virtual T getValue() = 0;
};

class ComparableInt: public algorithm::Comparable<int>
{
public:
    int value;
    int compareTo(Comparable<int> *i)
    {
        return value - i->getValue();
    };
    int getValue() { return value; } 
    ComparableInt(int i):value(i){};
};