【问题标题】:How can i choose just one object?我怎样才能只选择一个对象?
【发布时间】:2016-04-04 17:59:40
【问题描述】:

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

【问题讨论】:

    标签: c++ object scope


    【解决方案1】:

    这就是接口的用途!

    这样做:

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

    【讨论】:

    • @BenjaminLindley:我不知道你在说什么!咳咳。
    • @BenjaminLindley:啊!嘘!这个新奇的monstrosiceeplusplus!
    【解决方案2】:

    感谢更换! 我使用 Abstract_dictionary 作为抽象类,然后 VocabolarioRB 从 abstract_dictionary 继承,VocabolarioHT 从 abstract_dictionary 继承。 我主要使用了“istanza_vocabolario”,如果用户选择 1,它可以与 VocabolarioRB 相关,如果用户选择 2,它可以与 VocabolarioHT 相关。 在 abrasct 类中,我只有常见的变量和方法。我用特定的类覆盖了一些虚拟方法。 我不明白你的功能。我正在研究 C++ 我必须返回 VocabolarioRB 指针或 VocabolarioHT 指针。所以我可以写: 词汇表 * istanza_vocabolario= 新词汇表; 要么 VocabolarioHT * istanza_vocabolario= new VocabolarioHT;

    并在我的主要 istanza_vocabolario->插入/删除/查找中使用

    谢谢!

    【讨论】:

    • 实际上,我使用的是“new”,那么为什么如果我将一个对象声明到 IF 中然后会出现范围错误?我正在使用动态分配:s
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多