Ir ao conteúdo
  • Cadastre-se

vector e classes


silviia

Posts recomendados

Então, eu já tentei pesquisar em muitos sítios mas ainda nao consegui encontrar o que realmente procuro. Eu estou no curso de engenharia, e na cadeira de Programação tenho que desenvolver um programa que envolve classes. 

Basicamente é uma classe loja que contem a classe cliente,a classe raça e a classe ração e depois a main é um menu com opções para acrescentar ou visualizar cada parametro da classe.

Eu já estruturei todas as classes so que agora tenho uma grande duvida em relaçao a implementar Vector.

Eu tenho que fazer vector na classe loja, de modo a que seja possivel guardar varios tipos de clientes,racas e racoes mas o problema é que eu nao entendo como faço isso. 

eu sei que tenho de definir cada vector

vector<int>v1;
vector<int>v2;
vector<int>v3;

mas nao percebo como indico por exemplo que o v1 = raca.h , v2=racao.h, v3 = loja.h e em que sitio da classe loja faço isso,

e ainda para acrescentar e visualizar o vetor eu faço

for (int i = 0; i < v.size; i++)
{
		v1.ler();
        push_back(v1)                
}

mas como vou buscar os dados que foram inseridos na classe?

 

Desculpem se esta confuso, eu realmente me baralho muito com vectores.

Obrigada pela ajuda!

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

acho que se você tem uma classe loja você teria vários produtos(ração, raça), para vender a vários clientes, ou não sei se estou no certo. Nesse caso você teria vetor de clientes ração e raça  vector<clientes>v1, vector<racao>v2 e vector<loja>v3

Quando for inserir um novo cliente deveria ler seus dados primeiro e jogar esses dados em uma classe temporal para quando tiver completamente preenchida enviar ao arquivo com um puch_back.

Porém como não vemos seu código não entendo sua lógica, seria muito melhor ver o que você leva de trabalho para poder lhe encaminhar corretamente.

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

@vangodp eu tenho 3 classes definidas 

racao.h a raca.h e cliente.h , com todos os construtores, metodo ler e metodo escrever e mais algumas funcoes pedidas pelo trabalho.

Estas 3 classes são chamadas na classe loja.h onde eu acho que é ai que tenho de fazer o vector,so que eu nao entendo em que zona da classe loja eu faço isso, se é no private, no public ou nos construtores.

Tem em anexo o enunciado do meu trabalho para entender o que eu tenho de fazer.

 

Obrigada pela ajuda!

PROG.pdf

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Se por alguma razão você precisa acessar ao vetores diretamente de main então seus vetores deveriam ser públicos, porém isso é totalmente contra um dos principais pilares fundamentais da programação orientada a objeto, falamos do encapsulamento, se seu programa não respeita esse principio você já tem um problema, porque se imaginamos classes com variáveis publicas, o propósito das classes já não fazem sentido, para isso usamos estruturas ou simples variáveis e programamos como na linguagem C. Portanto certamente seu vetor deve ser privado, e estar vazio, ao fazer um registro você deve escolher uma opção em um menu, que ao ser escolhido invocaria um método que faça a leitura dos dados e faça o tal push_back, assim de simples.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

O uso das classes é obrigatorio no meu caso porque é assim que pede no trabalho.

Eu realmente nao estou entendendo como faço isso do vector, nao estou entendendo nem o que escrevo nem onde escrevo isso -.- muito complicado isso de vector pra mim .

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  1. #include <iostream>
    #include <cstdlib>
    #include <vector>
    using namespace std;
    
    //Declaramos 2 classes:
    class Produto {
    public:
        Produto( string umNome, float  umValor ) { nome = umNome; valor= umValor;  }
        void imprimir(){ cout << "Produto: " << nome << ". Valor: " << valor << endl;   }
    private:
        string nome;
        float valor;
    };
    
    class Loja {
    public:
        
        //Função inicial. Possue o menu
        void init(){
            
            bool sair = false;
            while ( !sair ) {
                system("cls");
                switch (opções()) {
                    
                    case 1:  cadastroProduto();       break;
                    case 2:  listarProdutos ();       break;
                    case 0:  sair = true;             break;
                    default: cout<<"Invalido!"<<endl; break;
                }
            }
        }
    
        //Imprime as opções e retorna um bool conforme a escolha do usuario
        int opções() { 
            cout << "1 Cadastro de produto \n2 Listar produtos \n0 Sair \nopcao?: "; 
            int op; cin >> op; cin.sync();
            return op;
        }
    
        //cadastra um produto
        void cadastroProduto(){
            system("cls");
            //Pedimos nome e valor
            cout << "Entre com o nome do produto: "; 
            string nome;
            getline(cin, nome);
            cin.sync();
            cout << "Entre com o valor do produto: "; 
            float valor;
            cin >> valor;
            cin.sync();
            
            //produto temporal
            Produto obj(nome, valor);
            
            //inserimos o produto na lista
            lista.push_back(obj);
        }
        
        //imprimir lista produtos
        void listarProdutos(){
            system("cls");
            
            //Imprime valor
            for ( unsigned int i=0; i < lista.size() ;i++ ) {
                lista[i].imprimir();
            }
            
            cin.ignore(); // pausa
        }
    
    private:
        vector<Produto> lista;
    };
    
    int main () {
        Loja casasBahia; // >_<
        casasBahia.init(); // mostramos o menu
        
        return 0;
    }

    Aqui você pode apreciar uma loja com uma lista de produtos. Para que lhe sirva de modelo. Estude o código e aplique no seu projeto. Nele você pode ver que existe um vetor de produtos dentro da classe loja. Acho que é o mais parecido ao que você está buscando. As duvidas que for tendo pergunte aqui.

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

No meu caso esses dados que voce pede eu ja os peço na classe com o ler e o listar. 

Exemplo da classe raca.h

void raca::inserirraca()
{
	cout << "===========Adicionar Raca==========" << endl;

	cout << "Designacao: ";
	cin >> designacao;

	cout << "Codigo: ";
	cin >> codigo;
	while (codigo <= 0)
	{
		cout << "Introduza um codigo valido!: ";
		cin >> codigo;
	}

	cout << "Peso: ";
	cin >> peso;
	while (peso <= 0)
	{
		cout << "Introduza um peso valido!: ";
		cin >> peso;
	}
	

}

void raca::listarraca()
{
	cout << "===========Visualizar Raca==========" << endl;

	cout << "Designaco: " << designacao << endl;
	cout << "Codigo: " << codigo << endl;
	cout << "Peso: " << peso<< endl;
	//defenir o tipo de raca atraves do peso
	if (peso <= 10)
	{
		cout << "Raca do tipo pequena"<<endl;
	}
	if (peso > 10 & peso <= 25)
	{
		cout << "Raca do tipo media" << endl;
	}
	if (peso > 25 & peso <= 45)
	{
		cout << "Raca do tipo grande" << endl;
	}
	if (peso > 45)
	{
		cout << "Raca do tipo gigante" << endl;
	}
}

e agora na loja eu vou ter que chamar esses dados e guardar num vector (o menu é a unica coisa na main), e eu fiz assim loja.h:

class loja
{
private:
	vector<raca>v1= new vector<raca>;
	vector<racao>v2 = new vector<racao>;
	vector<cliente>v3 = new vector<cliente>;
	
public:



	//construtores
	loja();
	loja(int n);
	loja(raca & r, racao & rc, cliente & c);
	loja(string des, int cod, float ps, string mar, int codr, float qtd, int codt, string n, int num, int cd, float pso);
	loja(const loja & l);
	//destrutor
	~loja();
	//metodos ler e listar
	void inserir1();
	void listar1();
	void inserir2();
	void listar2();
	void inserir3();
	void listar3();


};

...

//inserir e listar raca//
void loja::inserir1()
{
	for (int i = 0; i < v1.size(); i++)
	{
		v1.inserirraca()
		v1.push_back(const raca &r)
	}
}

void loja::listar1()
{
	for (int i = 0; i<v1.size(); i++)
	{
		cout<<v1[i];
	}
}

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

vector<raca>v1= new vector<raca>;
vector<racao>v2 = new vector<racao>;
vector<cliente>v3 = new vector<cliente>;

Estão errados.
Quando eu uso vector seguido de <> estou usando vector<> da STL, que você pode ver um exemplo aqui. você n4ao precisa usar new. Quando eu crio um vetor como esse-> vector<raca> v1; eu estou criando um vetor vazio, na realidade trata-se de uma planilha(classe que aceita qualquer tipo de dados incluindo compostos criados pelo usuario). Quando eu faço push_back é quando é criado a reserva na memória, porém você não precisa se preocupar com isso porque a classe vector faz tudo por você ao fazer o push_back.

Eu crio um vetor assim:
vector<int> v;

E depois eu faço o seguinte para ir adicionando valores:
v.push_back(10); //inserido o 10 no vetor

A cada push_back o vetor irá crescendo automaticamente sem que você precise se preocupar de usar new.

De uma olhada aqui como falei antes e veja um exemplo: http://www.cplusplus.com/reference/vector/vector/vector/

 

Agora se não puder usar STL vector é outra coisa. Talvez o que você esteja buscando é um simples vetor dinâmico.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

então ficaria so?

vector<raca>v1; 
vector<racao>v2;
vector<cliente>v3 ;

mas no caso do push_back voce esta inserindo logo o valor 10 e eu nao quero isso porque o que eu tenho a inserir é pedido pelo ler nas outras classes. Por isso é que coloquei 

v1.inserirraca()
v1.push_back(const raca &r)

onde o 1 é o que vai buscar o metodo inserirraca (da classe raca.h) e o segundo fazia o push_back com os valores inseridos, mas nao me estar a dar certo.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Pois mas nao me esta a dar certo, disseram para fazer 

raca r();
r.inserirraca();
v1.push_back(r)

mas da erro mesmo assim...

enfim eu tenho que enviar o programa ate as 23h55 , sao 21h xD se ate la nao descobrir olha vai mesmo assim pelo menos eu tentei ne. Isto de programar é bem difícil. Alem do mais eu nao faria assim o programa se pudesse escolher , porque acho que fica bem mais complicado , mas quem manda sao os professores ne.

 

Agradeço muito pela sua ajuda! deve ter sido o unico que realmente tentou pois nos outros foruns sempre me ficam mandando descobrir, mas esquecem que eu ainda estou aprendendo então eu realmente nao entendo nada disso xD

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@vangodp dentro da classe loja.h é como diz o enunciado :s

 

Citação

Declarar uma classe representativa da entidade Loja que conterá as raças,raçoes e clientes.

 

adicionado 2 minutos depois

classe loja.h : https://pastebin.com/LKukEpBP

classe raca.h (as outras tem a mesma estrutura) : https://pastebin.com/CpTtN0WS

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Por que não compartilha o código todo? Não lhe entendo. Primeiro você diz que v1 ta dentro de loja:

 

adicionado 0 minutos depois

1628658fe11e4d1fa7fe168d9b9877cf.png

adicionado 1 minuto depois

Agora você faz v1.push_back(r) dentro de main, mas em main não há nenhum vetor. Não lhe entendo. Fica difícil sem ver o código.

adicionado 3 minutos depois

Se o vetor está dentro de loja você teria que usa-lo assim
Loja loja;

loja.v1.push_back()

porém como v1 é private isso é impossível. você teria que por o push_back dentro de uma função publica e passar os dados ao v1 através dessa função.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Um erro: você não fez o include de racao dentro do loja.h.

Vou continuar buscando problemas...

adicionado 0 minutos depois

Pode me passar o data.h?

adicionado 1 minuto depois

Para poder rodar preciso desses arquivos:

#include "data.h"
#include "raca.h"
#include "racao.h"
#include "cliente.h"

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Tem sim kkk

#include "data.h"
#include "raca.h"
#include "racao.h"
#include "cliente.h"
 

a classe data foi a própria professora que fez então nao tem problema(é esse aqui:https://pastebin.com/HYa8ZbD8), eu sei que tem algumas coisitas erradas estou agora modificando isso, mas eu queria mesmo era saber como faço isso dos vetores :s porque o resto dos erros eu estou corrigindo.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!