[英]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
的行為。 就是說, phones
, computers
, shoes
和books
都具有共同點。
然后使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
枚舉類型的,這樣你就不必處理幻數,可替代1
, 2
, 3
,和4
用一些描述性的名字,如mode::phones
, mode::computers
, mode::shoes
和mode::books
。
switch
構造不會為您處理對象的動態分配。 最好在這里使用具有通用接口或抽象類(取決於您的需要)的結構,例如IFace
類,然后使用局部變量IFace *genObj
,然后使其等於new some_derived_from_IFace
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.