我试图在C ++中创建java Queue接口。从继承它时我无法正确编译它。
这是QueueInterface.h
#ifndef QUEUEINTERFACE_H_
#define QUEUEINTERFACE_H_
/**
* Java like interface
*/
template<class E>
class QueueInterface {
public:
virtual bool add(E e);
virtual E element();
virtual bool offer(E e);
virtual E peek();
virtual E poll();
virtual E remove();
virtual int size();
virtual bool isEmpty();
virtual ~QueueInterface();
};
#endif /* QUEUEINTERFACE_H_ */
这是LinkedQueue.h
#ifndef QUEUE_H_
#define QUEUE_H_
#include "QueueInterface.h"
#include "LinkedList.h"
template<class T>
class LinkedQueue: public QueueInterface<T> {
private:
LinkedList<T> linkedList;
public:
//DOES NOT COMPILEE
// virtual bool QueueInterface<T>::add(T t) {
// return false;
// }
// virtual T QueueInterface<T>::element() {
// T t;
// return T;
// }
// virtual bool QueueInterface::offer(T e) {
// return false;
// }
// virtual T QueueInterface::peek() {
// T t;
// return t;
// }
// virtual T QueueInterface::poll() {
// T t;
// return t;
// }
// virtual T QueueInterface::remove() {
// T t;
// return t;
// }
// virtual int QueueInterface::size() {
// return -1;
// }
// virtual bool QueueInterface::isEmpty() {
// return false;
// }
// virtual QueueInterface::~QueueInterface() {
// }
};
#endif /* QUEUE_H_ */
如何使用模板和多态来模拟Queue接口?
编辑:我必须改变的事情
接口: // = 0添加到函数
#ifndef QUEUEINTERFACE_H_
#define QUEUEINTERFACE_H_
/**
* Java like interface
*/
template<class E>
class QueueInterface {
public:
QueueInterface() {
}
virtual bool add(E e)=0;
virtual E element()=0;
virtual bool offer(E e)=0;
virtual E peek()=0;
virtual E poll()=0;
virtual E remove()=0;
virtual int size()=0;
virtual bool isEmpty()=0;
virtual ~QueueInterface() {
}
;
};
#endif /* QUEUEINTERFACE_H_ */
LinkedQueue实现(不工作只是试图让继承工作):
#ifndef QUEUE_H_
#define QUEUE_H_
#include "QueueInterface.h"
#include "LinkedList.h"
template<class T>
class LinkedQueue: public QueueInterface<T> {
private:
LinkedList<T> linkedList;
public:
LinkedQueue() {
}
virtual bool add(T t) {
std::cout << "entering add";
return false;
}
virtual T element() {
T t;
return t;
}
virtual bool offer(T e) {
return false;
}
virtual T peek() {
T t;
return t;
}
virtual T poll() {
T t;
return t;
}
virtual T remove() {
T t;
return t;
}
virtual int size() {
return -1;
}
virtual bool isEmpty() {
return false;
}
virtual ~LinkedQueue() {
}
};
#endif /* QUEUE_H_ */
如果要从java转换到c ++,请记住在打印布尔值时,c ++中的0或1与java中的true或false相比。
答案 0 :(得分:0)
您应该使用LinkedList成员实现队列接口中定义的操作:
#ifndef QUEUE_H_
#define QUEUE_H_
#include "QueueInterface.h"
#include "LinkedList.h"
template<class T>
class LinkedQueue: public QueueInterface<T> {
private:
LinkedList<T> linkedList;
public:
virtual ~LinkedQueue() {
}
virtual bool add(T t) {
linkedList.push_back(t);
}
virtual T element() {
return linkedList.front();
}
virtual size() {
return linkedList.size();
}
virtual isEmpty() {
return linkedList.empty();
}
// etc...
// you may need to do some blocking operations
// for some of the members like poll
};
显然我没有LinkedList的接口,所以列表成员函数调用基于std :: list