Poesía Binaria

Numerar objetos de una clase determinada [C++]

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).

También podría interesarte....