您好我创建了两个具有不同实现的字典(红黑树和哈希表) 我必须创建一个名为istanza_vocabolario的字典中的一个对象。
我在main
内部使用了例如istanza_vocabolario->Cancella(parola_new)
根据我的选择,istanza_vocabolario
必须是VocabolarioRB*
类型或Vocabolario*
。
我无法创建函数,因为我无法知道是否必须返回Vocabolario
指针或VocabolarioRB
指针。如果我将对象声明为IF,则会发生范围错误。
我能怎么做?
抱歉英文不好,谢谢!
#include "abstract_Vocabolario.h"
#include "abstract_Vocabolario.cpp"
#include "VocabolarioRB.h"
#include "Vocabolario.h"
#include "Vocabolario.cpp"
using namespace std;
char Menu();
int main()
{
VocabolarioRB* istanza_vocabolario = new VocabolarioRB;
int scelta_vocabolario;
cout<<"Quale vocabolario vuoi utilizzare (1 per RedBlack o 2 per HashTable) ?"<<endl;
cin>>scelta_vocabolario;
if (scelta_vocabolario == 2 )
{
delete istanza_vocabolario;
Vocabolario* istanza_vocabolario = new Vocabolario;
}
while(true)
{
char scelta=Menu();
switch(scelta)
{
case '1':
{
cout<<" 1)Inserimento parola"<<endl;
string parola_new;
cout<<endl<<" Inserisci parola da immettere nel vocabolario:\n ";
cin>>parola_new;
if (istanza_vocabolario->Inserisci(parola_new) != 0 )
cout << "Inserito con successo" << endl;
else
cout << "Inserimento non avvenuto" << endl;
}
break;
case '2':
{
cout<<" 3)Ricerca parola"<<endl;
string parola_ricercata;
cout<<endl<<" Inserisci parola da RICERCARE nel vocabolario:\n ";
cin>>parola_ricercata;
istanza_vocabolario->Ricerca(parola_ricercata);
}
break;
//case '3':
//istanza_vocabolario->Visita_Albero(); //MOMENTANEAMENTE VALE SOLO PER IL DIZIONARIO 2
//break;
case '4':
{
cout<<" 4)Eliminazione parola"<<endl;
string parola_new;
cout<<endl<<" Inserisci parola da eliminare nel vocabolario: ";
cin>>parola_new;
if (istanza_vocabolario->Cancella(parola_new) != 0)
cout<< "Eliminato con successo" << endl;
else
cout <<"Eliminazione NON avvenuta" << endl;
}
break;
case 'E':
delete istanza_vocabolario;
return 0;
default:
cout<<" ATTENZIONE";
cout<<" valore inserito non valido."<<endl;
}
}
return 0;
}
char Menu()
{
cout<<endl<<endl<<" Menu Vocabolario"<<endl<<endl;;
cout<<" Scegli l'operazione da compiere:"<<endl<<endl;
cout<<" 1";
cout<<" - Inserisci nuova parola;"<<endl;
cout<<" 2";
cout<<" - Ricerca parola;"<<endl;
cout<<" 3";
cout<<" - Visualizza albero;"<<endl;
cout<<" 4";
cout<<" - Elimina parola;"<<endl;
cout<<" E";
cout<<" - Esci dal programma."<<endl<<" ";;
cout<<endl<<" Digita il numero dell'operazione: ";
char valore;
cin>>valore;
cout<<endl;
return valore;
}
答案 0 :(得分:3)
这就是 interfaces 的用途!
这样做:
Vocabulario
VocabolarioRB
继承自Vocabulario
VocabolarioHT
继承自Vocabulario
Vocabulario
) 这些类型中的每一个都应具有相同的成员函数。然后,在main
中,您选择的实现并不重要,因为您只需通过Vocabulario*
指针调用所需的函数。
const bool use_hash = false;
std::unique_ptr<Vocabulario> ptr(
use_hash
? new VocabularioRB()
: new VocabularioHT()
);
ptr->foo();
ptr->bar();
答案 1 :(得分:0)
谢谢你的替换! 我使用Abstract_dictionary作为抽象类,然后VocabolarioRB继承自abstract_dictionary,VocabolarioHT继承自abstract_dictionary。 进入主要我用“istanza_vocabolario”可以与VocabolarioRB相关如果用户选择1或VocabolarioHT如果用户选择2。 在磨料类中,我只有变量和方法都很常见。我用特定的类覆盖了虚拟方法。 我不明白你的功能。我正在研究c ++ 我必须返回VocabolarioRB指针或VocabolarioHT指针。所以我可以写: VocabolarioRB * istanza_vocabolario =新的VocabolarioRB; 要么 VocabolarioHT * istanza_vocabolario =新的VocabolarioHT;
并在我的主要使用istanza_vocabolario-&gt;插入/删除/查找
谢谢!