Cuando trabajamos con objetos, en ocasiones tenemos la necesidad de numerar los objetos de una clase. En el caso de estar utilizando colecciones de datos (imaginemos un listado de clientes), debemos asignarles números consecutivos a cada uno de los clientes (que conste que este ejemplo no es válido si tenemos 10 millones de clientes), podremos hacerlo contando los clientes que tenemos para ver cuántos hay, o podemos contar cuántos tenemos a medida que vamos construyendo los objetos, uno de cada cliente.
Para este propósito, nos vamos a ayudar de un atributo estático en la clase Clientes, también será privado, y dado que ese dato será compartido por todos los objetos de la misma clase, podremos acceder a él en el constructor para establecer otro atributo (el número de cliente). Podemos verlo en el siguiente ejemplo:
Cliente.h
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #include <string> #include <iostream> using namespace std; class Cliente { public: Cliente(string nombre); void str(); private: string nombre; int numCliente; static int cuentaClientes; }; |
Cliente.cpp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #include "Cliente.h" int Cliente::cuentaClientes = 0; Cliente::Cliente(string nombre) { this->nombre=nombre; this->cuentaClientes++; this->numCliente=this->cuentaClientes; } void Cliente::str() { cout << "Hola soy "<<this->nombre<<" y soy el cliente numero "<<this->numCliente<<endl; } |
main.cpp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | #include "Cliente.h" int main(int argc, char *argv[]) { Cliente *c1, *c2, *c3, *c4; c1=new Cliente("Jose"); c2=new Cliente("Juan"); c3=new Cliente("Josue"); c4=new Cliente("Jacinto"); c1->str(); c2->str(); c3->str(); c4->str(); delete c1; delete c2; delete c3; delete c4; } |
Como vemos, cada vez que se hace new Cliente(«nombre») se construirá un objeto de clase Cliente y se obtendrá un número de cliente distinto (incremental).
Pingback: Bitacoras.com /
Pingback: Numerar objetos de una clase determinada [Java] | Poesía Binaria /
Únicamente quiero indicar que esta solución no es reentrante, si se crean objetos desde varios hilos podría ocurrir que varios clientes obtuviesen el mismo código de cliente.
Por lo demás enhorabuena por el magnífico contenido de este blog que acabo de descubrir hoy y gracias al cual me acabo de enterar de que se pueden utilizar punteros a funciones miembro y podré escribir código capaz de ejecutar plug-ins.
Muchas gracias Angel.
Llevas toda la razón. A ver si un día publico otra solución para este tipo de casos.
Me encanta haberte sido de utilidad 🙂 Muchas gracias de nuevo por tu comentario
I really like the way that you have expressed yourself. There is a lot to be admired from this post. You might want to click onJohn Dutton White Jacket Season 5