我无法弄清楚为什么我的虚拟功能没有被覆盖,在线查找示例时我无法发现我做错了什么,我一定是错过了什么。
基类
class HashTable {
// removed some unrelated functions and data to keep this page short
void Insert(int key, HashTable *htable)
{
int pos = Find(key, htable);
if (htable->table[pos].info != Legitimate)
{
htable->table[pos].info = Legitimate;
int rKey = Reverse(key);
htable->table[pos].element = rKey;
}
}
virtual int Find(int key, HashTable *htable)
{
return 0;
}
};
儿童班
class SingleHash : public HashTable {
int Find(int key, HashTable *htable)
{
int hashVal = HashFunc1(key, htable->size);
while (htable->table[hashVal].info != Empty &&
htable->table[hashVal].element != key)
{
hashVal = hashVal;
hashVal = hashVal % htable->size;
prob = prob + 1;
}
trackProbes(prob);
return hashVal;
}
};
class DoubleHash : public HashTable {
int Find(int key, HashTable *htable)
{
int hashVal = HashFunc1(key, htable->size);
int stepSize = HashFunc2(key, htable->size);
while (htable->table[hashVal].info != Empty &&
htable->table[hashVal].element != key)
{
hashVal = hashVal + stepSize;
hashVal = hashVal % htable->size;
prob = prob + 1;
}
trackProbes(prob);
return hashVal;
}
};
我的主要是什么样的
int main()
{
int value, size, pos, i = 1;
int choice = 1;
HashTable *htable = new SingleHash;
cin >> value;
htable->Insert(value, htable);
// more unrelated stuff
}
当我运行我的程序时,它只是在我调用Insert时返回基类(0)中的内容。
答案 0 :(得分:1)
您提供的代码中存在编译错误,例如未基于声明公开的函数。
我试图为你制作MCVE,它似乎工作得很好。
@Override
public String toString() {
return (name + age);
}
输出结果为:
单一哈希查找
DOuble hash find