我怎样才能选择一个对象?

时间:2015-12-30 18:22:01

标签: c++ object scope

您好我创建了两个具有不同实现的字典(红黑树和哈希表) 我必须创建一个名为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;
}

2 个答案:

答案 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;插入/删除/查找

谢谢!