повторное использование кода — Java «реализует» эквивалент в с ++?

Я хочу создать приоритетный класс очереди, который я могу использовать снова и снова в разных программах, в котором хранится только один тип / класс.

Я могу помешать любым другим типам / классам входить в очередь, используя методы CompareTo, но это означает, что класс очереди должен требовать метод compareTo во всех типах / классах, которые входят в очередь.

Я знаю, что в Java вы можете сделать класс реализующим Comparable, чтобы этот класс реализовывал метод compareTo. Поэтому мне было интересно, было ли что-то подобное в C ++.

Кроме того, я не могу использовать шаблоны, поэтому любые альтернативы будут оценены. Причина, по которой шаблоны недоступны, мне тоже неизвестна, тот, кто запрашивает эту программу, не проливает свет на это. Это должен быть мой собственный код для очереди приоритетов.

1

Решение

Похоже, вы хотите создавать интерфейсы в C ++. Вы должны проверить чисто виртуальные базовые классы. Пример можно найти здесь:

Как вы объявляете интерфейс в C ++?

Больше можно найти здесь.

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

6

Другие решения

Вы можете создать pure virtual function в базовом классе и наследовать его. В этом случае производный класс должен реализовать функцию, в противном случае он сам становится абстрактным классом.

3

Так как, вы неохотно используете шаблоны.

Вы могли бы также рассмотреть typeid в с ++.
например и больше информации Вот.

Также рассмотрим связанный вопрос переполнения стека.

Ниже приведен рабочий пример, который может вам подойти: Вот

#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;
}
1

С ++ Виртуальная функция похожа на инструменты в Java

0