Java“实现”c ++中的等价物?

时间:2013-09-02 05:30:05

标签: c++ code-reuse

我想创建一个优先级队列类,我可以在不同的程序中一次又一次地重复使用,它只存储一个类型/类。

我可以通过使用compareTo方法阻止任何其他类型/类进入队列,但这意味着队列类应该在进入队列的所有类型/类中都需要compareTo方法。

我知道在Java中,您可以使类实现Comparable以确保该类实现compareTo方法。所以我想知道c ++中是否有类似的内容。

同样,我不能使用模板,因此,任何替代方案都将受到赞赏。模板不受限制的原因我也不知道,要求这个程序的人不会对此有所了解。它也必须纯粹是我自己的优先级队列代码。

4 个答案:

答案 0 :(得分:6)

听起来你想用C ++构建接口。您应该检查纯虚拟基类。可以在这里找到一个例子:

How do you declare an interface in C++?

更多信息可以在这里找到。

http://www.learncpp.com/cpp-tutorial/126-pure-virtual-functions-abstract-base-classes-and-interface-classes/

答案 1 :(得分:3)

您可以在基类中创建pure virtual function并继承它。在这种情况下,派生类必须实现该函数,否则它本身就变成了一个抽象类

答案 2 :(得分:1)

因为,你不愿意使用模板。

您也可以在c ++中考虑typeid。 例如以及更多信息here

还要考虑related stackoverflow question

可能适合您的工作示例如下:您可以看到输出here

#include <typeinfo>
#include <iostream>
#include <string>

using namespace std;

class QueueAbleObject{
};

class A : public QueueAbleObject{

};
class B:  public QueueAbleObject{

};




class Queueu{
      string mQueueDataType ;
public:

    void SetType(const  std::type_info& typeInfo){
        mQueueDataType  = typeInfo.name();  
        cout << "list type " <<      mQueueDataType << endl ;
    }

    bool Insert( QueueAbleObject*  obj , const std::type_info& objTypeInfo )    
    {
        if( objTypeInfo.name() != mQueueDataType ){
            cout << " Incompatible Object type  " <<objTypeInfo.name() << endl;
            return false;
        }

        //do insertionn

        return true;

    }
};


int main(){
    Queueu q;
    q.SetType( typeid(A) );

    A a;
    bool res = q.Insert(&a , typeid(a));
    cout << " Insertion of  A :  " <<  res << endl;

    B b;
    res = q.Insert(&b , typeid(b));
    cout << " Insertion of B : " <<  res << endl ;


    return 0;   
}

答案 3 :(得分:0)

c ++ Virtual Function类似于java中的implements