Ir ao conteúdo
  • Cadastre-se
silviia

vector e classes

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

Compartilhar este post


Link para o post
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

Compartilhar este post


Link para o post
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

Compartilhar este post


Link para o post
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

Compartilhar este post


Link para o post
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

Compartilhar este post


Link para o post
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

Compartilhar este post


Link para o post
Compartilhar em outros sites

@vangodp Acho que ja estou a começar a compreender.

Diferença que no meu caso o menu é na main e os vetores estão na classe loja.h e esse cin que voce faz a pedir os valores estão em outras classes no metodo listar e ler.

 

Obrigada pela ajuda!

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sinta-se livre para modifica-lo a vontade >_<

Como falei, raça e ração terão seu métodos para ler dados e informar, e loja se encarrega de manipular a lista e chamar esses métodos. Com esse exemplo acho que da para entender mais ou menos.

  • Curtir 1

Compartilhar este post


Link para o post
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

Compartilhar este post


Link para o post
Compartilhar em outros sites

alguem me sabe dizer se estou a fazer isto bem? :oops:

Obrigada

  • Curtir 1

Compartilhar este post


Link para o post
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

Compartilhar este post


Link para o post
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

Compartilhar este post


Link para o post
Compartilhar em outros sites

sim... correto. porém não se esqueça que v1 é um vetor, então você teria que fazer v1[X].inserirraca() onde 'X' é o numero do índice do vetor, se você fez 3 push_backs você tem de v1[0] a v1[2] com STL vector.

  • Curtir 1

Compartilhar este post


Link para o post
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

Compartilhar este post


Link para o post
Compartilhar em outros sites

Onde você criou o vetor? Dentro de main ou dentro da classe?

  • Curtir 1

Compartilhar este post


Link para o post
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

Compartilhar este post


Link para o post
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

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu mandei o código todo. ta ai no pastebin.

o push_back esta na classe loja.h , eu criei o metodo inserir1 , inserir 2 inserir 3 um para cada classe, para depois na main dependendo da opção que eu escolher ele ir buscar um desses metodos.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Onde está o link? Pode mandar novamente? Não o vejo por nenhuma parte.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não desanime >_<. Ja solucionaremos :D

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito complicado isso de vetores, principalmente para quem esta aprendendo e a professora nao explica quase nada xD eu consigo mal ou bem fazer tudo o resto que ela pede, so os vetores é que me deixam perdida.

:tw_dizzy:

  • Curtir 1

Compartilhar este post


Link para o post
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

Compartilhar este post


Link para o post
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

Compartilhar este post


Link para o post
Compartilhar em outros sites

você usa codeblocks?

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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...

Aprenda a ler resistores e capacitores

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!