Este codigo define e implementa un tipo de datos residente en el heap pila.

pila4.h

class Pila_char 
{
	const static int deftam = 100;
	char *v;
	int tope;
	int tamactual;

	public:
	
	Pila_char(): tope(0), tamactual(deftam) {v = new  char[tamactual];}
	void push(char);
	char pop();
	~Pila_char(){delete v;}
	
	class Vacia{};
};

pila4.C

#include "pila4.h"

void Pila_char::push(char c) 
{
	if (tope == tamactual) 
	{
		int tamnuevo = tamactual + deftam;
		char *vinter = new char [tamnuevo];
		for(int i =0; i<tamactual ; i++) vinter[i]=v[i];
		delete v;
		v = vinter;
	}
	v[tope++] = c;
}

char Pila_char::pop() 
{
	if (tope == 0) throw Vacia();
	return v[--tope];
}

Y este otro codigo hace uso de pila4.C

usopila4.C

#include "pila3.h"
#include<iostream>

void main() 
{
	Pila_char p;
	for(int i=1;i<300;i++) p.push('c');
	p.push('d');
	cout << p.pop()<<'\n';
	cout << p.pop()<<'\n';
}
Para obtener el ejecutable correspondiente hacer:
g++ usopila4.C pila4.C -o usopila4