인쇄 메서드를 사용하여 동일한 클래스를 상속하는 몇 가지 클래스가 있습니다. 맞춤형 동적 배열 템플릿 클래스도 있습니다. 하위 클래스의 객체에 대한 포인터의 동적 배열을 몇 개 만들었습니다. 모든 배열에 대해 포인터로 가리키는 개체의 모든 인쇄 메서드를 호출하기위한 별도의 함수가 필요합니다. 때때로 "무기"만 인쇄 할 수도 있고 때로는 "수정"또는 때로는 모든 것을 인쇄 할 수도 있습니다. 지금까지 나는 모든 배열에 대해 첫 번째 방법 (코드에 표시된대로)을 복사하여 붙여 넣거나 동적 배열을 "mother"클래스에 대한 포인터의 배열로 변환하고 새 배열을 범용 인쇄 기능. 주먹 방식에서 다섯 개 행을 복사 - 붙여 넣기, 또는 두 번째 방법에서 더 복잡한 다섯 개 행을 복사 - 붙여 넣기 다섯을 추가 : 그래서 두 가지 선택이함수의 인수로 자식 클래스의 개체에 대한 포인터의 템플릿 배열
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);
(또는 "weapon"또는 무엇이든)을 작성하여 단순히 "프린터"를 호출하는 것입니다. 그리고 이것은 전체 프로젝트의 설계에 필요합니다. 나는 선생님과 상담했지만 대답은 함수를 호출하기 전에 변환하지 않고는 할 수 없다는 것이 었습니다.
하지만 여전히 원하는 방식으로 논리적으로 그러한 동적 배열을 전달할 수있는 방법이 있습니까?
선생님의 말을 들어보세요. – Steger
나는 다른 방법을 시도했다. 그리고 예 - 실제로 다른 방법은 없다. – AlexSavAlexandrov