Всё сложно :)
Есть класс Manager и FracNum. Экземпляры класса FracNum создаются в массиве указателей на них в классе Manager. Если массив слишком мал, для вмещения очередного экземпляра класса FracNum, то срабатывает функция и массив увеличивается в двое.
Массив указателей используется для функции addition(); для функции же subtraction(); необходимо использовать ссылки.
Каким образом это можно сделать? Нужно создать ещё один дин.массив для ссылок по точно такому же принципу как и массив указателей?
Немного кода:
manager.h
class FracNum;
class manager {
private:
int SizeCounter;
int FracNumCounter;
FracNum * mCurrentFracNumPointer;
FracNum * parray;
FracNum * bufarray;
void resizeArray();
public:
manager() : SizeCounter(0), FracNumCounter(0), mCurrentFracNumPointer(0), parray(0)
{
SizeCounter = 3;
printf("Logs:\nSize ");
printf("%d\n", SizeCounter);
printf("FracNums ");
printf("%d\n", FracNumCounter);
parray = new FracNum[SizeCounter];
mCurrentFracNumPointer = parray;
printf("Array create success...\n");
}
~manager()
{
}
};
manager.cpp
void manager::resizeArray()
{
//Creating buf array
printf("\nCreate temp array.");
FracNum * bufarray = new FracNum[SizeCounter];
//Coppy elements to buf array
printf("\nCopying elements from old to new array...");
for (int i = 0; i < FracNumCounter; i++) { bufarray[i] = parray[i]; }
//Clear old array
printf("\nDestroy old array.\n");
delete[] parray;
//New derection XD
printf("\nRedirection pointing to new place in memory.\n");
parray = bufarray;
}
void manager::NewFracNum(int Numerator, int Denominator, string xSign)
{
// in this case we can assign array
if (FracNumCounter == SizeCounter)
{
cout << endl << "---SOURCE PROCESS-----------------------------------------------------";
printf("\nDetected that current array isn't big enough to accept all FracNums.\n");
printf("\nDoubled size...");
SizeCounter *= 2;
printf("\nNew size is %d", SizeCounter);
resizeArray();
}
bool Sign;
if (xSign == "+" || xSign == "1" || xSign == "true") {
Sign = true;
}
if (xSign == "-" || xSign == "0" || xSign == "false") {
Sign = false;
}
*(parray + FracNumCounter++) = FracNum(Numerator, Denominator, Sign);
printf("\nSystem:\nNew FracNum will be created.\nCreated FracNums & Curren size of array:\t %d | %d\n", FracNumCounter, SizeCounter);
}