pop()を基本クラスに実装し、派生クラスから適切な派生クラスheapifyUp()メソッドをpop()する必要があります。私はそれぞれの派生物についてpop()を作ることができることを認識していますが、私はこの問題をどのように解決すべきかに興味があります。派生メソッドを呼び出すためにderivedからbaseのインスタンスを渡す
minHeapインスタンスまたはmaxHeapインスタンスをpop()に渡すための「汎用」方法を作成するにはどうすればよいですか?
class Heap
{
public :
int size;
int *items;
Heap(int n) { this->items = new int[n]; this->size = 0; }
~Heap() { delete[] items; }
int peek() { return items[0]; }
int _pop()
{
int top = items[0];
items[0] = items[size - 1];
--size;
heapifyDown();
return top;
}
}
class minHeap : Heap
{
public :
minHeap(int capacity) : Heap(capacity) {}
void heapifyUp()
{
int index = size - 1;
while(hasParent(index) && (parent(index) > items[index]))
{
swap(getParentIndex(index), index);
index = getParentIndex(index);
}
}
void heapifyDown()
{
}
}
class maxHeap : Heap
{
public:
maxHeap(int capacity) : Heap(capacity) {}
~maxHeap() {}
void heapifyUp()
{
}
void heapifyDown()
{
}
};
私が何かが欠けていない限り、あなたは 'class heap {virtual void heapifyUp()= {};を宣言する必要があります。 // ... etc ... '、もちろん、テキストブックの「仮想関数」のセクションを再度読んでください。 –
'Heap'は' HeapStrategy'テンプレートパラメータを受け入れるテンプレートクラスです。 'HeapStrategy'は' MinHeapStrategy'または 'MaxHeapStrategy'です。次に、MinHeap = Heapを使用し、MaxHeap = Heap を使用します。これは_Policy-Based Design_という一般的なプログラミング手法です。申し訳ありませんが、私はより完全な答えにこれを詳述する時間がありません。 –
私は 'virtual void heapifyUp()= 0;'と書かれているはずですが、そのセクションも再読み込みする必要があります。 –