Jump to content
Sign in to follow this  
AnaCal

ajuda a criar instancias de clientes por favor

Recommended Posts

AnaCal

Pretendo criar criar clientes com base num numero aleatorio O problema é que ao alterar a funçao que cria os clientes, esta nao funciona. Postei o codigo da funçao a funcionar pra criar um cliente na classe simulador

Outro problema que tenho é como criar um vector ou algo do genero para guardar os clientes. Pensei em algo do tipo

Cliente arrayClientes[50];
for(int i = 0; i<50; i++){
arrayClientes[i].defineId(i+1);

Alguem me pode ajudar por favor?

#include "Cliente.h"
#include <iostream>
using namespace std;


Cliente::Cliente(int)   // ver se vai precisar de um constutor que recebe parametros
{
id = 0;
    prioridade =0;
    numeroItens = 0;
    horaChegada = 0;
    tempoCompra = 0;
    tempoRecolha = 0; 

}; 
    
int Cliente::getid()    // para ver é c->getid()
    {
        return this->id;       
    }
    
void Cliente::setid(int n)
{
	this->id = n;
}


int Cliente::getprioridade()
    {
        return this->prioridade;       
    }
    
void Cliente::setprioridade(int n)
{
	this->prioridade=n;
}

int Cliente::getnumeroItens()
    {
        return this->numeroItens;       
    }
    
void Cliente::setnumeroItens(int n)
{
	this->numeroItens=n;
}


Cliente::~Cliente()
{
    cout << "Destrutor - fim de  cliente.. " << endl;
}

#include <assert.h>
#include <fstream>
#include "Simulador.h"
#include "Cliente.h"
#include <iostream>
using namespace std;
// criar um membro nesta classe para o vector de clientes


Simulador::Simulador(void)
{
}




Simulador::~Simulador(void)
{
}


int Simulador::Inicializacao(int hora)
{



// Geração do primeiro evento


}


int Simulador::Execucao()           // mudei de void para int por causa da alocaçao dinamica que tem return
{
     
int id = 1; int tempo = 1;
int resultado; 


int cria(){
           srand(time(NULL));
        for (int i=0; i<1; i++)
             resultado = rand() % 15;    
}


        cria();
        if(tempo!=resultado)
           tempo++;
           c = new Cliente(id);


       cout << "cliente " << c->getid();



}


void Simulador::Finalizacao()
{
}

Share this post


Link to post
Share on other sites
pikax

Pretendo criar criar clientes com base num numero aleatorio O problema é que ao alterar a funçao que cria os clientes, esta nao funciona. Postei o codigo da funçao a funcionar pra criar um cliente na classe simulador

Não percebi muito bem, o que realmente queres :S

O problema é que ao alterar a funçao que cria os clientes, esta nao funciona.

Penso que essa função seja o "construtor" da class.

Podias ter posto a class cliente, criei a class com base do que postaste e não compilou, não sei se é este o teu problema, o erro foi este:

error: no matching function for call to 'Cliente::Cliente()'|

Se foi este o erro é por causa do teu construtor e da array, quando crias uma array estática(ex: Cliente arrayClientes[50]; ) é chamado o construtor default ou seja Cliente::Cliente(), para criares um constutor dinâmico, isto é por exemplo: Cliente::Cliente(int id, ... ) tens que utilizar memória dinâmica.

vector<Cliente* > vClientes;

Cliente *tempCli;
int tempID;
//resto...

for(int i=0;i<50;++i)
{
	cin>>tempID>>/*resto*/;
	tempCli= new Cliente(tempID,/*resto*/);
	vClientes.push_back(tempCli);
}

Cliente arrayClientes[50];
for(int i = 0; i<50; i++){
arrayClientes[i].defineId(i+1);

Não tens esse membro definido no Cliente.cpp que mandaste.

int Simulador::Execucao()           // mudei de void para int por causa da alocaçao dinamica que tem return
{
     
int id = 1; int tempo = 1;
int resultado;


int cria(){
           srand(time(NULL));
        for (int i=0; i<1; i++)
             resultado = rand() % 15;    
}


        cria();
        if(tempo!=resultado)
           tempo++;
           c = new Cliente(id);


       cout << "cliente " << c->getid();



}

Não cries funções dentro de funções, fica muito confuso para se perceber o código, cria antes a função fora da função.

Se não era isto que tens duvidas, explica-te melhor.


Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Share this post


Link to post
Share on other sites
AnaCal

Obrigado pela ajuda e pelas dicas, estou a segui las!  :cheesygrin:  De facto nao postei o codigo final que tinha por lapso. Fiquei aqui com umas duvidas em relaçao a alocaçao dinamica

Eu criei aquele array para conseguir manipular os clientes pelo ID. Com este vector posso fazer qualquer coisa do tipo (tendo em conta que ja nao quero definir um numero maximo de clientes):

vector<Cliente* > vClientes;
        
        Cliente *tempCli;
int i;
                //tempCli->setid(i);    esta parte nao é necessaria porque nas 2 linhas a seguir ja lhe define o id, ne?
                tempID = i;
                tempCli= new Cliente(tempID);
                vClientes.push_back(tempCli);
                i++;

e no construtor do cliente coloco que ja recebe um parametro que é o id

Um cliente tem um id e um numero do tipo de cliente que é outro int. Depois de alocar dinamicamente, como posso aceder as instancias criadas? Para aceder a uma instancia criada sei que é tempCli ->getId(); (que ja esta definido na classe cliente) mas para um conjunto de instancias como faço?  :dontgetit:

Share this post


Link to post
Share on other sites
pikax

Eu criei aquele array para conseguir manipular os clientes pelo ID. Com este vector posso fazer qualquer coisa do tipo (tendo em conta que ja nao quero definir um numero maximo de clientes):

Eu falei no vector, porque tinhas um array e um vector é em certa parte parecido com uma array.

tens aqui uma lista de containers clica aqui

Para melhor esclarecimento de um vector vê isto

Para aceder a um elemento do vector é igual ao array

vector<Cliente* > vClientes;

//inserção de elementos
//...


//aceder ao 5 elemento
cout<<"id = "<<vClientes[4].getid()<<endl
<<"prioridade = "<<vClientes[4].getprioridade()<<endl
<<"horaChegada = "<<vClientes[4].gethoraChegada()<<endl
<<"tempoCompra = "<<vClientes[4].gettempoCompra()<<endl
<<"tempoRecolha = "<<vClientes[4].tempoRecolha<<endl;

//o vector tambem começa em zero como um array


Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.