KirillHelm
@KirillHelm

Как переделать массив указателей в массив ссылок C++?

Всё сложно :)

Есть класс 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);
}
  • Вопрос задан
  • 309 просмотров
Решения вопроса 1
AtomKrieg
@AtomKrieg
Давай я поищу в Google за тебя
не надо ничего заводить, внешне ссылки слабо отличаются обычных объектов. Достаточно делать разыменование указателей для использования их как параметра по ссылке: https://ideone.com/GoFyGs

либо функцию перепишите, чтобы принимали одинаковые типы
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы