第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

C++ 如何動態(tài)的創(chuàng)建對象

C++ 如何動態(tài)的創(chuàng)建對象

Qyouu 2019-04-09 20:23:52
/**模板方法**用于創(chuàng)建不同的Card實例*/templateT*Create(intcardNum,char*name,char*password,intcardType){returnnewT(cardNum,name,password,cardType);}/**發(fā)卡**傳入?yún)?shù):用戶名*密碼*卡的類型*返回值:卡號*/intBank::CreateCard(char*name,char*password,intcardType){intcardID;if(cardType==1)//借記卡{//cards[CardNum]=newDebitCard(CardNum,name,password,cardType);cards[CardNum]=Create(CardNum,name,password,cardType);}elseif(cardType==2)//貸記卡{//cards[CardNum]=newCreditCard(CardNum,name,password,cardType);cards[CardNum]=Create(CardNum,name,password,cardType);}cardID=1000+CardNum;CardNum++;returncardID;}如上面的代碼所示,起初我是想創(chuàng)建Card的子類對象時去除if/else語句的判斷,所以定義了一個模板,但是調(diào)用模板時候仍然要傳入具體的類型,在CreatCard(...)方法中,注釋部分是之前的代碼。如果我想去除CreateCard(...)方法中的if/else該怎么做呢?如果我用枚舉值,C++中可以通過枚舉字符串值轉(zhuǎn)化為類型嗎?
查看完整描述

2 回答

?
湖上湖

TA貢獻(xiàn)2003條經(jīng)驗 獲得超2個贊

C++沒有完善的反射機(jī)制,這點一直挺為人詬病。但是你這個需求很簡單可以實現(xiàn),思路供參考:
intcreate_credit_card(...){...};
intcreate_debit_card(...){...};
intBank::CreateCard(...)
{
struct{inttype;int(*func)(...);}func_map[n]={
{1,create_credit_card},
{2,create_debit_card},
...
};
for(i=0;i{
if(func_map[i].type==cardType)
....;
}
}
                            
查看完整回答
反對 回復(fù) 2019-04-09
?
斯蒂芬大帝

TA貢獻(xiàn)1827條經(jīng)驗 獲得超8個贊

這個問題無卡反射,你需要使用工廠模式來負(fù)責(zé)創(chuàng)建對象。
如何來告訴工廠你想要創(chuàng)建的對象類型,這個方法有很多,簡單列舉幾種:
1.使用枚舉類型,自己記住每種枚舉對應(yīng)的對象類型,簡單并且實用。工廠實用swithcase來創(chuàng)建對象?;蛘呤褂酶鞣N你認(rèn)為很cool的方法來產(chǎn)生對象。
CardFactory::CreateCard(enumCardTyppe)
{
switch(CardType)
{
caseenCreditCard:
returnnewCreditCard();
caseenCreditCard:
returnnewDebitCard();
default:
returnnullptr;
}
}
intBank::CreateCard(...)
{
CardFactory::CreateCard(cardTyppe);
2.C++中可以實用typeid來識別對象,注意這需要編譯器支持,并且低效,并不推薦在這里使用。
使用工廠的好處在于,Bank不用關(guān)系對象創(chuàng)建的細(xì)節(jié)。只需要傳遞給工廠一個可以識別對象類型的標(biāo)識,可以是枚舉,也可以是字符串。
                            
查看完整回答
反對 回復(fù) 2019-04-09
  • 2 回答
  • 0 關(guān)注
  • 356 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號