Sunteți pe pagina 1din 6

Ministerul Educatiei din Republica Moldova

Universitatea Tehnica din Moldova


FCIM

Raport
Lucrare de laborator nr.6
Programare in C++

VARIANTA 7

A efectuat: st.gr TI-15X


Student Name

A verificat:
Scrob Sergiu

Chisinau 2016
LUCRARE DE LABORATOR NR. 6

Tema: Polimorfism. Funcţii virtuale


Scopul lucrării:
 Studierea polimorfismului;
 Studierea principiilor legăturii târzii;
 Studierea funcţiilor virtuale;
 Polimorfismul ad-hoc;
 Realizarea funcţiilor virtuale;
 Studierea claselor abstracte.

Varianta 7
Creaţi clasa abstractă de bază Container cu funcţiile virtuale de inserare şi extragere. Creaţi
clasele derivate Stack şi Queue, în care funcţiile date sunt predefinite. În funcţia main determinaţi
masivul de pointeri la clasa abstractă, cărora li se atribuie adresele obiectelor claselor derivate.

Codul programului:
#include <iostream>
#include <string>

using namespace std;

class Container
{
public:
virtual void push(int) = 0;
virtual void pop() = 0;
virtual void show() = 0;
};

class Stack : public Container


{
int *tab;
int nb;
int index;
public:
Stack() : tab(NULL), nb(0), index(0)
{}

Stack(int nb)
{
this->nb = nb;
tab = new int[nb];
index = 0;
}

~Stack()
{
delete [] tab;

2
}

bool isFull()
{
return (index == nb);
}

bool isEmpty()
{
return (index == 0);
}

virtual void push(int n)


{
if(isFull())
{
cout << "Stiva este plina !!" << endl;
return ;
}
tab[index++] = n;
cout << "Success !!" << endl;
}

virtual void pop()


{
if (isEmpty())
{
cout <<"Stiva este goala !!" << endl;
return ;
}
tab[index--];
cout << "Success !!" << endl;
}

virtual void show()


{
int i = -1;
if (isEmpty())
{
cout <<"Stiva este goala !!" << endl;
return ;
}
while (++i < index)
cout << tab[i] << " ";
cout << endl;
}
};

class Queue : public Container


{
int *tab;
int index;
int max_elem;
int first_elem;
public:
Queue() : tab(NULL), index(0), max_elem(0), first_elem(0)
{}

3
Queue(int n)
{
tab = new int[n];
max_elem = n;
index = 0;
first_elem = 0;
}

bool isFull()
{
return (index >= max_elem);
}

bool isEmpty()
{
return (first_elem == index);
}

virtual void push(int n)


{
if (isFull())
{
cout << "Coada este plina !!" << endl;
return ;
}
tab[index++] = n;
cout << "Success !!" << endl;
}

virtual void pop()


{
if (isEmpty())
{
cout << "Coada este goala !!" << endl;
return ;
}
tab[first_elem++];
max_elem++;
cout << "Success !!" << endl;
}

virtual void show()


{
int i = first_elem;
if (isEmpty())
{
cout << "Coada este goala !!" << endl;
return ;
}
while (i < index)
{
cout << tab[i] << " ";
i++;
}
cout << endl;
}
};

4
int main()
{
Container *cont;
int ch;
int n;

cout << "[1]. Crearea unei Stive." << endl;


cout << "[2]. Crearea unei Cozi." << endl;
cout << "[0]. Exit." << endl;
cin >> ch;
if (ch == 0)
return (0);
if (ch == 1)
{
cout << "Cite elemente?" << endl;
cin >> n;
cont = new Stack(n);
}
if (ch == 2)
{
cout << "Cite elemente?" << endl;
cin >> n;
cont = new Queue(n);
}
while (1)
{
system("cls");
cout << "[1]. Push." << endl;
cout << "[2]. Pop." << endl;
cout << "[3]. Show." << endl;
cout << "[0]. Exit" << endl;
cin >> ch;

if (ch == 0)
return (0);
if (ch == 1)
{
cout << "Input >> ";
cin >> n;
cont->push(n);
}
if (ch == 2)
cont->pop();
if (ch == 3)
cont->show();
system("pause");
}
system("pause");
return (0);

5
Demonstratea programului:

Concluzie:

 In rezultatul elaborarii lucrarii date s-a pus baza aplicarii in practica a cunostintelor teoretice
referitoare OOP, Polimorfizm si functii virtuale.
 Astfel se poate judeca despre posibilitatile largi acordate de limbajul C++ referitor la
manipularea claselor.

S-ar putea să vă placă și