Изучение использования перегрузки операторов (Лабораторная работа № 2), страница 4

// инициализации

cout<<endl<<i<<"-й элемент таблицы:"<<endl;

arrPointers[i]->edit();

cout<<*arrPointers[i]<<endl;

}

for (int i = 0; i<arrSize; i++)

{

*(arrResult+i) = new Complex();

}

while (menu());

return 0;

}

int menu()                                                  // меню LAB2

{

system("cls");

gotoxy(0, 0);

cout<<"Исходные значения:";

showTable(0, 2, arrPointers);

gotoxy(40, 0);

cout<<"Результаты:";

showTable(40, 2, arrResult);

gotoxy(20, 4);

cout<<model;

for (int i = 0; i<arrSize; i++)

{

gotoxy(37, 2+i);

if (*arrResult[i]==model)

cout<<"=";

else

{

Complex temp = model;

cout<<((int)*arrResult[i]<(int)temp ? ">" : "<");

}

gotoxy(65, 2+i);

cout<<"(int)Complex = "<<(int)*arrResult[i];

}

gotoxy(0, 18);

cout<<"Выберите операцию для применения к значениям из таблицы:"

<<"\n\t1 - вычитание"<<endl

<<"\t2 - сложение"<<endl

<<"\t3 - декремент"<<endl

<<"\t4 - инкремент"<<endl

<<"\t5 - изменить исходные значения"<<endl

<<"\tESC - выход"<<endl;

while (!_kbhit());

int choice = _getch();

switch (choice)

{

case '1':                           // вычитание

for (int i = 0; i<arrSize; i++)

{

sub(arrPointers, i);

}

break;

case '2':                           // сложение

for (int i = 0; i<arrSize; i++)

{

add(arrPointers, i);

}

break;

case '3':                           // декремент

for (int i = 0; i<arrSize; i++)

{

dec(arrResult, i);

}

break;

case '4':                           // инкремент

for (int i = 0; i<arrSize; i++)

{

inc(arrResult, i);

}

break;

case '5':

int num;

gotoxy(0,8);

cout<<"Введите номер элемента таблицы: ";

cin>>num;

gotoxy(0, 9);

arrPointers[num]->edit();

break;

case ESC:

deleteArr(arrPointers, arrSize);

deleteArr(arrResult, arrSize);

return FALSE;

}

return TRUE;

}

void showTable(int x, int y, Complex** &arr)              // вывод таблицы объектов

{

for (int i = 0; i<arrSize; i++)

{

gotoxy(x, y+i);

cout<<i<<": ";

if (arr[i]!=NULL)                                 // если указатель не равен нулю

{

cout<<*arr[i];                                // то выводим объект

}

else

cout<<"empty"<<endl;

}

}

void add(Complex** arr, int num)

{

*arrResult[num] = *(arr[num])+model;

}

void sub(Complex** arr, int num)

{

*arrResult[num] = *(arr[num])-model;

}

void inc(Complex** arr, int num)

{

++*(arr[num]);

}

void dec(Complex** arr, int num)

{

--*(arr[num]);

}

void deleteArr(Complex** &arr, int size)                 // удаление массива

{

for (int i = 0; i<size; i++)

{

Complex::del(arr[i]);                            // удаление объектов массива

}

delete[] arr;                                        // удаление массива

return;

}

void gotoxy(int x, int y)                                // перевод курсора в положение X,Y

{

HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);

COORD coord;

coord.X = x;

coord.Y = y;

SetConsoleCursorPosition(hStdOut, coord);

return;

}

7.  Дополнительные вопросы.