• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

suzy

array de objectos?

10 mensagens neste tópico

Para ser franco nunca vi essa sintaxe.

A primeira palavra numa declaração é o tipo de dados... por isso isso seria um objecto, ou struct do tipo "vector" que deve estar definido algures.

Esse <cliente> aí no meio é que é mesmo bizzarro... eu desconheço por completo uma sintaxe declarativa com dois parametros. Anyway... "contas" seria o nome do objecto ( ou struct )

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não uso muito C++, mas parece-me uma normal declaração de uma variável (contas) do tipo vector (da STL), indicando que os elementos do vector serão do tipo Cliente.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Já aqui estive a pesquisar... yaps.. é isso mesmo.

Tenho que me familiarizar com o STL. Nem sabia que este tipo de sintaxe era usada.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

É um array de objectos, em que os objectos são do tipo Cliente.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Conhecer a STL dá muito jeito. E a biblioteca "algorithm" tem algoritmos bastante uteis.

Primeiro convem distinguir array de vector. Um array é a estrutura que todos devem conhecer que já vem do C. Também podes ter um array de objectos. Pegando no teu exemplo:

Cliente clientes[30];

Um vector é uma classe implementada na biblioteca "vector" da STL. Um vector é um array dinâmico.

#include <vector>
using std::vector;
...
vector<Cliente> clientes;

Não precisas de definir o tamanho do vector inicialmente (embora o possas fazer). Com esta estrutura de dados, o limite de elementos que podes ter é a memória do pc (podes sempre adicionar elementos, enquanto tiveres memoria).

Claro que nem tudo são rosas. Esta classe verifica se precisa de redimensionar o seu array interno, entre outras validações, o que faz com que seja mais lenta do que usar um array normal do C.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

vector <Cliente> contas;

isto e um array de objectos?

Boas,

Eu estou a fazer um trabalho e também uso o vector da STL. A definição é muito parecida.... Mas não compreendo como vou gravar os objectos, que estão no vector, para um ficheiro. :wallbash:

Tenho o seguinte código

//crio 2 objectos de clientes
Cliente cli1("Manel", "Rua", "3000", "Cascos", "12345", "9191919191", manel@dsf.cs);
Cliente cli2("Lelo", "Rua", "3100", "Oaz", "12345", "9191919191", lelo@dsf.cs);
ofstream myfile;
myfile.open ("clientes.txt");
vector<Cliente> v_cliente;
//adiciono 2 objectos ao vector
v_cliente.push_back( cli1 );
v_cliente.push_back( cli2 );
//vou inserir os 2 obectos do vector para um ficheiro e é aqui que dá erro... 
for (int i=0; i < v_cliente.size(); i++){
  myfile << v_cliente.at(i) << endl;
}
myfile.close();

Alguém me pode dar uma dica?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Overload do operador << ?

#include <iostream>
#include <vector>
#include <string>
#include <fstream>

using namespace std;

class Cliente{
public:

string _n, _r, _p, _d, _num, _tele, _mail;
Cliente(string n, string r, string p, string d, string num, string tele, string mail){
	_n = n; _r = r; _p = p; _d = d; _num = num; _tele = tele; _mail = mail;
} 
friend ostream& operator<<(ostream& o, const Cliente& p);
};

ostream& operator<<(ostream& o, const Cliente& c) {
o << c._n << ", " << c._r << ", " << c._p << ", " << c._d << ", " << c._num << ", " << c._tele << ", " << c._mail ;
return o;
}

int main(){
Cliente cli1("Manel", "Rua", "3000", "Cascos", "12345", "9191919191", "manel@dsf.cs");
Cliente cli2("Lelo", "Rua", "3100", "Oaz", "12345", "9191919191", "lelo@dsf.cs");
ofstream myfile;
myfile.open ("clientes.txt");
vector<Cliente> v_cliente;
//adiciono 2 objectos ao vector
v_cliente.push_back( cli1 );
v_cliente.push_back( cli2 );
//vou inserir os 2 obectos do vector para um ficheiro e é aqui que dá erro... 
for (int i=0; i < v_cliente.size(); i++){
  myfile << v_cliente.at(i) << endl;
}
myfile.close();
}

Não faço ideia como tinhas a tua classe Cliente... mas foi assim que testei aqui.. e deu.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Aqui:

myfile << v_cliente.at(i) << endl;

dá erro porque o ofstream não sabe como inserir objectos do tipo Cliente num ficheiro. A solução do mobes a modos que o "ensina" :;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Viva,

Mobes e TheDark muito obrigado pela dica!  ;)

Era mesmo isso!  :biggrin:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora