Universidad de los Andes 
Magister en Ingeniería de Sistemas y Computación 
Patrones de Diseño de Software                   Taller de Programación 1 
Profesor: Pablo Figueroa 
 
Fecha Inicio:         25 de Agosto
Fecha de entrega:  1 de Septiembre

Implementar los Idioms Forma canónica de Clase, Conteo de Referencias y Sobre-Carta usando conteo de apuntadores para una clase Persona con la siguiente definición (agregue las operaciones que hagan falta para la forma canónica):
 

class Persona
{
public:
  Persona( const char* nombre, const char* tel )
  void CrearFamiliar( const char* nombre, const char* tel );
  void CambiarNombre( const char* nombre );
  void CambiarTel( const char* tel );
  int numFamiliares( ) const;
  void Imprimir( ) const;  // Muestra la informacion de la persona y de sus familiares
  String getNombre( ) const;
  String getTel( ) const;
private:
  String nombre;
  String tel;
  Persona familiares[MAX];
};
Reutilizar la clase String del ejemplo de Coplien.
El main del programa debe ser algo como:
 
const int MAX=20;
const int SALIR=10;
void main( )
{
  Persona arr[MAX];
  int opcion = -1;
  while( opcion != SALIR )
  {
    // mostrar menu de opciones (los mismos métodos)
    cin >> opcion;
    switch( opcion )
    {
      // revision de todas las opciones
      case 1:
      // Crear una persona: Pide los datos y lo agrega en la siguiente
      //   posicion del arreglo. Si no puede avisa al usuario
        break;
      case 2:
      // Crear un familiar: se pide el numero de la persona y los datos del
      //   familiar. Si no puede avisa al usuario
        break;
      case 3:
      // Cambiar nombre: Se pide el numero de la persona y su nuevo nombre
      //   Si no puede avisa al usuario
        break;
      case 4:
      // Cambiar telefono: Se pide el numero de la persona y su nuevo telefono
      //   Si no puede avisa al usuario
        break;
      case 5:
      // Copiar persona: Se pide el numero de la persona y se copia su
      // informacion
      //   Si no puede avisa al usuario
        break;
      case 6:
      // Imprimir: Se pide el numero de la persona y se imprime
      //   Si no puede avisa al usuario
        break;
      case SALIR: break;
    }
  }
}