class W1{
int a; //значение переменной
public:
void add(int x){
a = x;
}
void get(int &x){
x = a;
}
W1 &operator ++(int) //функция-член постфиксное сложение
{
a++;
return *this;
}
friend W1 operator --(W1 &ob, int) //дружественная функция
{
ob.a--;
return ob;
}
};
Задание 2
//КЛАСС ОЧЕРЕДИ
class Queue
{
struct N //или просто Звено очереди
{
int x;//инфо данные структуры
N *Next; //Указатель не следующее звено
} *First, *Last; //Указатели на начало очереди и на конец
public:
Queue() :First(NULL), Last(NULL){};
int get_size()
{
int size = 0;
N* p = First;
while (p != NULL)
{
size++;
p = p->Next;
}
return size;
}
//функция очистки очереди
void clear()
{
while (First != NULL)
{
N *p = First;
First = First->Next;
delete p;
}
return;
}
//ДИСТРУКТОР
~Queue()
{
clear();
}
//КОНСТРУКТОР КОПИРОВАНИЯ
Queue(Queue &obj)
{
First = NULL;
if (obj.First == NULL) {First = obj.First;}
else
{
N *p = obj.First, *t;
while (p)
{
t = new N;
t->x = p->x;
t->Next = First;
First = t;
p = p->Next;
}
}
}
//ФУНКЦИЯ ОТОБРАЖЕНИЯ ОЧЕРЕДИ НА ЭКРАНЕ
String^ Show()
{
N *temp = First; //Временный указатель на начало очереди
String^ str = "";
if (temp == NULL)
{
return str = "Пусто";
}
while (temp != NULL) //Пока в списке что-то встречается
{
str += String::Format("{0}", (temp->x)) + "\r\n"
temp = temp->Next; //сдвигаем указатель
}
return str;
}
//ДОБАВЛЕНИЕ ЭЛЕМЕНТА В ОЧЕРЕДЬ
void operator +=(int a)
{
N *temp = new N;
temp->x = a;
temp->Next = NULL;
if (First != NULL) //Если очередь не пуста
{
Last->Next = temp;
Last = temp;
}
else First = Last = temp;
return;
}
//проверка на пустоту очереди
bool isEmpty()
{
return (First==NULL)
}
//СЛОЖЕНИЕ ОЧЕРЕДЕЙ
Queue operator +(const Queue &r)
{
Queue temp;
N *p = First, *v = r.First;
while (p)
{
temp += (p->x)+(v->x);
v = v->Next;
p = p->Next;
}
return temp;
}
//ВЫЧИТАНИЕ ОЧЕРЕДЕЙ
Queue operator -(const Queue &r)
{
Queue temp;
N *p = First, *v = r.First;
while (p)
{
temp += (p->x) - (v->x);
v = v->Next;
p = p->Next;
}
return temp;
}
//ФУНКЦИЯ ИЗЪЯТИЯ ЭЛЕМЕНТА ИЗ ОЧЕРЕДИ
void operator--(int)
{
if (First != NULL) //Если очередь не пустая
{
N *temp = First; //Обращаемся к началу очереди
First = First->Next; //Сдвиг начала очереди
delete temp; //Освобождение памяти от предыдущего звена очереди
}
}
Queue & operator=(Queue &r)
{
if (!r.isEmpty())
{
N *p = r.First, *t = First;
while (p)
{
t = new N;
t->x = p->x;
t->Next = First;
First = t;
p = p->Next;
}
}
else First = NULL;
return *this;
}
};