簡體   English   中英

根據C ++中的用戶輸入為特定對象分配不同的類

[英]Assigning different classes to a particular object depending on user input in C++

我考慮了一個對象“ genObj”。 該對象可以屬於手機,筆記本電腦,鞋子或書籍等類別。 我希望接受1-4之間的用戶輸入,並相應地將genObj分配給心室類。

我希望這樣做,因為我必須將這些對象添加到數據文件中。 我為不同的類維護4個單獨的數據文件,並且還為fileName分配了一個值。

 switch(mode)
    {
     case 1:
        phones genObj;
        strcpy(fileName,"phonesDatabase.dat");
        break;
     case 2:
        computers genObj;
        strcpy(fileName,"computersDatabase.dat");
        break;
     case 3:
        shoes genObj;
        strcpy(fileName,"shoesDatabase.dat)";
        break;
     case 4:
        books genObj;
        strcpy(fileName,"booksDatabase.dat");
        break;
    }

這樣做會產生以下錯誤:

"Multiple declaration for genObj in function add(int)"

值被分配給fileName就像我聲明的一樣

char fileName[20];

全局,稍后將對其進行初始化。 但是,由於對象genObj可以屬於不同的類,因此無法像這樣初始化。

如果我無法根據用戶輸入為genObj指定不同的類,則必須將代碼分為4部分,每個部分用於一個類。 那太麻煩了,太笨拙了。

謝謝。

您無法在運行時動態決定對象的類型。

似乎您應該在這種情況下使用多態

首先定義一個抽象類,例如object ,該類定義用於訪問genObj的行為。 就是說, phonescomputersshoesbooks都具有共同點。

然后使object這四個子類,然后是這樣的:

std::unique_ptr<object> genObj;

switch(mode)
{
    case 1:
        genObj = std::make_unique<phones>();
        strcpy(fileName, "phonesDatabase.dat");
        break;
    case 2:
        genObj = std::make_unique<computers>();
        strcpy(fileName, "computersDatabase.dat");
        break;
    case 3:
        genObj = std::make_unique<shoes>();
        strcpy(fileName, "shoesDatabase.dat)";
        break;
    case 4:
        genObj = std::make_unique<books>();
        strcpy(fileName, "booksDatabase.dat");
        break;
}

(請注意, make_unique僅在最新的C ++標准中是一項功能,因此,如果您為舊標准編寫代碼,則必須使用new ,例如genObj.reset(new books) 。)

另外,作為一個側面說明,使mode枚舉類型的,這樣你就不必處理幻數,可替代123 ,和4用一些描述性的名字,如mode::phonesmode::computersmode::shoesmode::books

switch構造不會為您處理對象的動態分配。 最好在這里使用具有通用接口或抽象類(取決於您的需要)的結構,例如IFace類,然后使用局部變量IFace *genObj ,然后使其等於new some_derived_from_IFace

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM