我有幾個類使用print方法繼承相同的類。我也有一個定製的動態數組模板類。我創建了一些動態的指向來自子類的對象的指針數組。對於每個數組,我希望有一個單獨的函數來調用指針所指向的所有對象的打印方法 - 有時我只打印「武器」,有時只打印「修改」或有時打印所有內容。到目前爲止,我已經嘗試了兩種解決方案 - 爲每個數組複製粘貼第一種方法(如代碼所示)或將動態數組轉換爲指向「母親」類的指針數組,並將新數組作爲參數傳遞給通用數據打印功能。作爲函數參數的子類對象的指針模板數組
這裏是一些代碼:
class Item {...}
class Modification : public Item {...}
class Equipment : public Item {...}
DynamicArray<Modification*> modification;
DynamicArray<Equipment*> weapon;
//The first way:
void printModsInfo()
{
if (modification.size() == 0)
cout<<"No mods in inventory\n";
else
for (int i = 0; i < modification.size(); i++)
modification.returnElement(i)->printInfo();
}
void printWeaponsInfo()
{
if (weapon.size() == 0)
cout<<"No weapons in inventory\n";
else
for (int i = 0; i < weapon.size(); i++)
weapon.returnElement(i)->printInfo();
}
//The second way:
void _printModsInfo()
{
Item** tempRef = new Item*[modification.size()];//array of pointers
for (int i = 0; i < modification.size(); i++)//converting DynamicArray<Modification*> into Item** tempRef
tempRef[i] = modification.returnElement(i);
printCertainStuffInInventory (tempRef, modification.size());
delete tempRef;
}
void _printWeaponsInfo()
{
Item** tempRef = new Item*[weapon.size()];
for (int i = 0; i < weapon.size(); i++)
tempRef[i] = weapon.returnElement(i);
printCertainStuffInInventory (tempRef, weapon.size());
delete tempRef;
}
void printCertainStuff (Item** arr, int size)
{
if (size == 0)
cout<<"Nothing from this type in inventory...\n";
else
for (int i = 0; i < size; i++)
arr[i]->printInfo();
}
所以,我有兩個選擇:複製粘貼的拳路五行,或更復雜的五行從第二條路複製粘貼,並新增5更多行用於打印功能。但我真正想要做的僅僅是將動態數組作爲參數傳遞,並在打印功能中進行轉換(如果需要),或者通過編寫:printCertainStuff(modification);
(或「武器」或其他)來簡單地調用「打印機」。這是整個項目設計所要求的。我曾經諮詢過我的老師,但答案是在調用函數之前沒有轉換就沒有辦法做到這一點。
但仍然有辦法按照我想要的方式傳遞動態數組作爲參數嗎?
聽老師。 – Steger
我嘗試了其他方法,是的 - 真的沒有別的辦法。 – AlexSavAlexandrov