Funcionamiento de una Pila en C++ (usando un Array contenedor)

Una pila (stack en inglés) es una lista ordinal o estructura de datos en la que el modo de acceso a sus elementos es de tipo LIFO (del inglés Last In First Out, último en entrar, primero en salir) que permite almacenar y recuperar datos. Esta estructura se aplica en multitud de ocasiones en el área de informática debido a su simplicidad y ordenación implícita de la propia estructura.
Para el manejo de los datos se cuenta con dos operaciones básicas: apilar (push), que coloca un objeto en la pila, y su operación inversa, retirar (o desapilar, pop), que retira el último elemento apilado.


En esta ocasión crearé una "pila" usando sus métodos comunes: Apilar, Desapilar

//Clase Dato
class Dato

{
public:
    char nombre[40];
char apellidos[40];
int edad;
};


//Clase Principal

#include <iostream>
#include "Dato.h"
using namespace std;
void ApilarDato(Dato Pila[] , int &top) {
if (top = -1) {
top=0;
cout << "Ingrese nombre: "; cin >> Pila[top].nombre;
cout << "Ingrese Primer apellido: "; cin >> Pila[top].apellidos;
cout << "Ingrese Edad: "; cin >> Pila[top].edad;
cout << endl;
}
else
{
top++;
cout << "Ingrese nombre: "; cin >> Pila[top].nombre;
cout << "Ingrese Primer apellido: "; cin >> Pila[top].apellidos;
cout << "Ingrese Edad: "; cin >> Pila[top].edad;
cout << endl;
}
}
void DesapilarDato(Dato Pila[], int &top) {

cout << "Desapilando dato..." << endl;
cout << "Nombre:" << Pila[top].nombre << endl;
cout << "Primer Apellido:" << Pila[top].apellidos << endl;
cout << "Edad:" << Pila[top].edad << endl;
}
int main()
{
Dato Pila[10];
int top = -1;
int opc;

do {
cout << "Hola :D, Ingrese una opcion:" << endl;
cout << "1.La pila esta vacia?" << endl;
cout << "2.Apilar Dato" << endl;
cout << "3.Desapilar Dato" << endl;
cout << "4.Finalizar" << endl;
cin >> opc;
switch (opc)
{
 case  1: 
 if (top != -1)
 cout << "La pila contiene elementos" << endl;
 else
 cout << "La pila se encuentra vacia" << endl;
      break;

 case 2:
ApilarDato(Pila, top);
 break;
 case 3:
 DesapilarDato(Pila, top);
 break;
 default:
 cout << "Opcion no encontrada" << endl;
 opc = 4;
}
} while (opc != 4); 

system("PAUSE");
    return 0;
}