我有几个类通过打印方法继承同一个类。我还有一个定制的动态数组模板类。我创建了一些指向子类对象的动态指针数组。对于每个数组,我都希望有一个单独的函数来调用指针指向的对象的所有打印方法——有时我只想打印“武器”,有时只打印“修改”,有时则只打印所有内容。到目前为止,我已经尝试了两种解决方案——为每个数组复制粘贴第一种方法(如代码所示),或者将动态数组转换为指向“母”类的指针数组,并将新的作为参数传递给通用类打印功能。
这里是一些代码:
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();
}
所以我有两个选择:从第一种方式复制粘贴五行,或者从第二种方式复制粘贴更复杂的五行,然后再添加五行用于打印功能。但我真正想做的是简单地将动态数组作为参数传递并在打印函数中进行转换(如果需要)——或者简单地通过编写调用“打印机”:printCertainStuff(modification);
(或“武器”或其他)。这是整个项目的设计所要求的。我确实咨询过我的老师,但答案是在调用函数之前不转换就没有办法做到这一点。
但是仍然有办法以我想要的方式将此类动态数组作为参数传递吗?
最佳答案
我不是 100% 清楚你想要什么,但如果要结合你所有的打印方法,你可以尝试使用模板:
template< class T >
void printInfo ( const T& arr, const char* failmessage )
{
if (arr.size() == 0)
cout<<failmessage;
else
for (int i = 0; i < arr.size(); i++)
arr.returnElement(i)->printInfo();
}
然后用于你会去的武器:
printInfo( weapon, "No weapons in inventory\n" );
修改也类似。
关于c++ - 指向子类对象的指针模板数组作为函数的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23819129/