Консультация № 190312
19.12.2016, 03:58
0.00 руб.
0 0 0
Здравствуйте! Прошу помощи.

Задание: Стек:
1) стек на основе динамического массива;
2) стек на основе статического массива.

Пожалуйста, прокомментируйте каждую строчку кода, кроме ввода и вывода. Можно ли сократить и оптимизировать код программы...
Расскажите, пожалуйста, в чём польза использования абстрактных классов, и где в этой программе прослеживается иерархия классов с использованием абстрактных классов?


Приложение:
#include <Windows.h>
#include <stdio.h>
#include <iostream>
#include <stdlib.h>

using namespace std;

class Stk
{
public:

virtual bool push (int a) = 0; // <- благодаря этому, данный класс можно назвать абстрактным
virtual bool pop (int *a) = 0;
};
class DStk : public Stk //динамический стек
{
public:
int n; int *arr; int top;


DStk(int n)
{

this -> n = n;
arr = new int[n];
this -> top = 0;
}

bool push (int a)
{
if (top == n) return false;
else
{
arr[top] = a;
top++;
return true;
}

}
bool pop(int*a)
{
if (top == 0)return false;
else
{
*a = arr[top - 1];
top--;
return true;
}
}
};


class SStk : public Stk //статический стек
{
private:
int arr[5];
int top;
public:
SStk(){ top = 0; }
bool push(int a)
{
if (!(top == 5))
{
arr[top] = a;
top ++;
return true;
}
else return false;

}
bool pop(int *a){
if (!(top == 0))
{
*a = arr[top - 1]; top--;
return true;
}
else return false;
}
};

int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);

Stk *S = nullptr; //NULL для указателей
char nomer;
do
{
system("CLS");
cout << "Нажмите '1' и Enter для выбора ДИНАМИЧЕСКОГО стека. \n \nНажмите '2' и Enter для выбора СТАТИЧЕСКОГО стека.\n \nНажмите '0' и Enter для выхода.\n\n";
cin >> nomer;
switch (nomer) //обработка событий
{
case '1': //для клавиши 1
int temp;
cout << endl << "Выберите размер стека: \n";
cin >> temp;
S = new DStk(temp);
break;
case '2': //для клавиши 2
S = new SStk();
break;
case '0': //для клавиши 0
return 0;
break;

}
} while (!(nomer == '1' || nomer == '2'));

char num;
do
{

system("CLS");
cout << "V.Добавить элемент\nX.Удалить элемент\nE.Выход\n";
cin >> num;

switch (num)
{
case 'V': //для клавиши V
int temp1;

cout << endl << "Введите число, которое надо добавить: \n";
cin >> temp1;

if (S->push(temp1))
{
cout << "Добавлен элемент: " << temp1 << endl;
system("PAUSE");

}
else
{
cout << "ERROR" << temp1 << endl; system("PAUSE");
}
break;

case 'X': //для клавиши X

if (S->pop(&temp1))
{
cout << "Удален элемент:" << temp1 << endl; system("PAUSE");
}
else
{
cout << "ERROR" << temp1 << endl; system("PAUSE");
}

break;

case 'E': //для клавиши E
return 0;

break;

}
} while (!(num == 'E'));
}

Обсуждение

Форма ответа