gpt4 book ai didi

c++ - 我怎样才能只选择一个对象?

转载 作者:行者123 更新时间:2023-11-28 00:07:50 24 4
gpt4 key购买 nike

您好,我创建了两个具有不同实现的字典(红黑树和哈希表)我必须只创建一个名为 istanza_vocablario 的字典对象。

main 中我使用例如 istanza_vocablario->Cancela(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;
}

最佳答案

这就是接口(interface)的用途!

这样做:

  • 声明一个名为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();

关于c++ - 我怎样才能只选择一个对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34534975/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com