1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Vector ou map(c++)?

Discussão em 'Programação' iniciada por moody, 14 de Outubro de 2007. (Respostas: 11; Visualizações: 3409)

  1. Boas,


    Tenho de fazer um pequeno trabalho acerca de c++ para a universidade e estou a deparar-me com diversos problemas.
    Pretendo criar um registo de automóveis e dos seus donos,em que um dono pode ter vários automóveis e um automóvel só tem um dono.Qual das duas opções seria a melhor a tomar?E,já agora,porquê?
     
  2. napalm

    napalm Power Member

    (este código provavelmente tem algum erro de sintaxe, os meus tempos em que escrevia C de olhos fechados já se foram)
    Código:
    typedef struct {
      string name;
    } Car;
    typedef struct {
      string name;
      vector<Car*> cars;
    } Owner;
    
    vector<Owner *> owners;
    // puts(owners[0]->cars[0]->name);
    map<Car*, Owner*> carOwners;
    // puts(carOwners["ford"]->name);
    
    Vectores parecem encaixar-se melhor no teu caso, em que potencialmente poderás de ter de fazer mais listagens que pesquisas. Os maps são úteis quando pretendes indexar a tua informação para a acederes rapidamente.
    Um exemplo simples é teres o nome do carro mas não teres o nome de um dono.
    No exemplo que coloquei podes ter de percorrer todos os vectors de Car até encontrares o carro certo. Com o map de carOwners a pesquisa torna-se linear.
     
  3. E não poderia ser algo deste género?

    Código:
    map<o->getnome(), vector<veiculo> >
    
     
  4. ...

    Na minha cabeça vai uma grande confusão acerca de <vector> e <map> e <pair>...
    Sei que num vector a indexação é feita através de inteiros e é percorrido o vector elemento a elemento,enquanto que no mapa a indexação pode ser do tipo que quisermos(map<type,value>)...Certo?Então e o <pair> também não é algo semelhante ao map?Uma vez que eu quero associar os proprietários aos seus respectivos carros(que podem ser mais do que um) não poderia usar o objecto <pair> em vez do map?
     
  5. napalm

    napalm Power Member

    não tenho a certeza mas desconfio que um map seja um vector (ou um list) de pairs :D
     
  6. O que faz exactamente este bocado de código?

    Código:
    vector<Car*> cars
    A parte do ponteiro está-me a baralhar um bocado.
     
  7. napalm

    napalm Power Member

    Aqui vai um código completo com alguns comentários que espera que te faça compreender melhor como é que isto funciona.
    Código:
    #include <vector>
    
    using namespace std;
    
    typedef struct {
      char* name;
    } Car;
    
    int main() {
    
            vector<Car> cars; // vector de Car
            vector<Car *> cars2; // vector de ponteiros para Car
          
            Car mini;
            mini.name = "Mini";
            cars.push_back(mini);
            cars[0].name = "Fiat";
    
            puts(mini.name); // prints Mini
            // mini is cars[0] ?
            printf("%s\n", (&mini == &cars[0]) ? "True" : "False"); // prints False
    
            cars2.push_back(&mini); // nao faz push de um Car mas sim dum inteiro que é a posição de memória de mini
            cars2[0]->name = "Fiat";
    
            puts(mini.name); // prints Fiat
            // mini is cars2[0] ?
            printf("%s\n", (&mini == cars2[0]) ? "True" : "False"); // prints True
    }
    
     
    Última edição: 15 de Outubro de 2007
  8. ...

    Este é o meu código actual...Ainda está muita,muita coisa por fazer...Tou com dúvidas no momento acerca de uma parte do código: eu na classe cra defini os maps como publicos...será que deveria antes ter colocado como privados?E outra coisa,uma vez que eu tenho na classe cra uma função in_pv(...) cujos argumentos são os objectos de veiculos e de proprietários(uma vez que assim neste modo se torna mais fácil em vez de se estar a mandar os parametros todos dos atributos das classes como nome,morada,matricula,etc.),criei um .cpp à parte com o nome cra de maneira a poder chamar essa função no main.No main eu queria chamar essa função pois como antes o user introduziu os dados,eu queria enviá-los à função no .cpp para que assim guardasse os dados nas variáveis criadas dentro das classes veiculos e proprietáriose mais tarde nessa função criar os pares de associações entre veiculos e proprietários...Só que não tenho ideia como enviar esses dados todos na função main uma vez que o que tenho lá é o objecto de ambas as classes.
    Será que alguém me poderá dar uma ajuda com o código?
    Ultima questão: será que é necessário estar os construtores na classe proprietário e veiculos uma vez que quem vai gerir isso é o registo automóvel através dos métodos adicionar,eliminar,etc.?

    Código:
     
     
    [SIZE=2][COLOR=#0000ff][COLOR=white]#include[/COLOR][/COLOR][/SIZE][COLOR=white][SIZE=2]<stdlib.h>
    [/SIZE][/COLOR][SIZE=2][COLOR=white]#include[/COLOR][/SIZE][COLOR=white][SIZE=2]<iostream>
    [/SIZE][/COLOR][SIZE=2][COLOR=white]#include[/COLOR][/SIZE][COLOR=white][SIZE=2]<string>
    [/SIZE][/COLOR][SIZE=2][COLOR=white]#include[/COLOR][/SIZE][COLOR=white][SIZE=2]"cra.h"
    [/SIZE][/COLOR][SIZE=2][COLOR=white]#include[/COLOR][/SIZE][COLOR=white][SIZE=2]"veiculo.h"
    [/SIZE][/COLOR][SIZE=2][COLOR=white]#include[/COLOR][/SIZE][SIZE=2][/SIZE][SIZE=2][COLOR=white]"proprietario.h"[/COLOR]
     
    [/SIZE][SIZE=2][COLOR=white]void[/COLOR][/SIZE][SIZE=2][COLOR=white] main()[/COLOR]
    [COLOR=white]{[/COLOR]
    [/SIZE][SIZE=2][COLOR=white]char[/COLOR][/SIZE][SIZE=2][COLOR=white] input;[/COLOR]
    [COLOR=white]string nome,morada,marca,modelo,cor,mat;[/COLOR]
    [/SIZE][SIZE=2][COLOR=white]long[/COLOR][/SIZE][SIZE=2][COLOR=white] bi,telef,cil,pot,nprop;[/COLOR]
    [COLOR=white]veiculo v;[/COLOR]
    [COLOR=white]proprietario p;[/COLOR]
    [COLOR=white]cra r;[/COLOR]
     
    [COLOR=white]cout << [/COLOR][/SIZE][COLOR=white][SIZE=2]"REGISTO AUTOMOVEL"[/SIZE][SIZE=2]"\n"[/SIZE][/COLOR][SIZE=2][COLOR=white]<< endl;[/COLOR][/SIZE]
    [SIZE=2][COLOR=white]while[/COLOR][/SIZE][SIZE=2][COLOR=white]( 1 )[/COLOR]
    [COLOR=white]{[/COLOR]
    [COLOR=white]cout << [/COLOR][/SIZE][SIZE=2][COLOR=white]"Adicionar cliente e veiculo(a):""\n"[/COLOR][/SIZE][SIZE=2][COLOR=white]<< endl; [/COLOR]
    [COLOR=white]cout << [/COLOR][/SIZE][SIZE=2][COLOR=white]"Remover proprietario(p):""\n"[/COLOR][/SIZE][SIZE=2][COLOR=white]<< endl;[/COLOR]
    [COLOR=white]cout << [/COLOR][/SIZE][SIZE=2][COLOR=white]"Remover veículo(v):""\n"[/COLOR][/SIZE][SIZE=2][COLOR=white]<<endl ; [/COLOR]
    [COLOR=white]cout << [/COLOR][/SIZE][SIZE=2][COLOR=white]"Actualiza proprietarios e veiculos(t):""\n"[/COLOR][/SIZE][SIZE=2][COLOR=white]<<endl ;[/COLOR]
    [COLOR=white]cout << [/COLOR][/SIZE][COLOR=white][SIZE=2]"Consultar veiculos(n):"[/SIZE][SIZE=2]"\n"[/SIZE][/COLOR][SIZE=2][COLOR=white]<<endl;[/COLOR]
    [COLOR=white]cout << [/COLOR][/SIZE][SIZE=2][COLOR=white]"Consultar proprietario(o):""\n"[/COLOR][/SIZE][SIZE=2][COLOR=white]<< endl; [/COLOR]
    [COLOR=white]cout << [/COLOR][/SIZE][SIZE=2][COLOR=white]"Sair(s): ""\n"[/COLOR][/SIZE][SIZE=2][COLOR=white]<< endl;[/COLOR]
    [COLOR=white]cin >> input;[/COLOR]
     
    [/SIZE][SIZE=2][COLOR=white]switch[/COLOR][/SIZE][SIZE=2][COLOR=white]( input )[/COLOR]
    [COLOR=white]{[/COLOR]
    [/SIZE][COLOR=white][SIZE=2]  case[/SIZE][SIZE=2]'a'[/SIZE][/COLOR][SIZE=2][COLOR=white]:[/COLOR]
    [COLOR=white]  { [/COLOR]
    [COLOR=white]cout <<[/COLOR][/SIZE][SIZE=2][COLOR=white]"Nome: "[/COLOR][/SIZE][SIZE=2][COLOR=white] <<endl;[/COLOR]
    [COLOR=white]cin>>nome;[/COLOR]
    [COLOR=white]cout<<[/COLOR][/SIZE][SIZE=2][COLOR=white]"BI: "[/COLOR][/SIZE][SIZE=2][COLOR=white]<<endl;[/COLOR]
    [COLOR=white]cin >>bi;[/COLOR]
    [COLOR=white]cout<<[/COLOR][/SIZE][SIZE=2][COLOR=white]"Morada: "[/COLOR][/SIZE][SIZE=2][COLOR=white]<<endl;[/COLOR]
    [COLOR=white]cin>>morada;[/COLOR]
    [COLOR=white]cout<<[/COLOR][/SIZE][SIZE=2][COLOR=white]"Telefone: "[/COLOR][/SIZE][SIZE=2][COLOR=white]<<endl;[/COLOR]
    [COLOR=white]cin >>telef;[/COLOR]
    [COLOR=white]cout <<[/COLOR][/SIZE][SIZE=2][COLOR=white]"Marca do carro: "[/COLOR][/SIZE][SIZE=2][COLOR=white]<<endl;[/COLOR]
    [COLOR=white]cin >>marca;[/COLOR]
    [COLOR=white]cout << [/COLOR][/SIZE][SIZE=2][COLOR=white]"Matricula: "[/COLOR][/SIZE][SIZE=2][COLOR=white]<<endl;[/COLOR]
    [COLOR=white]cin >>mat;[/COLOR]
    [COLOR=white]cout << [/COLOR][/SIZE][SIZE=2][COLOR=white]"Cor: "[/COLOR][/SIZE][SIZE=2][COLOR=white]<<endl;[/COLOR]
    [COLOR=white]cin >>cor;[/COLOR]
    [COLOR=white]cout << [/COLOR][/SIZE][SIZE=2][COLOR=white]"Modelo: "[/COLOR][/SIZE][SIZE=2][COLOR=white]<<endl;[/COLOR]
    [COLOR=white]cin >>modelo;[/COLOR]
    [COLOR=white]cout << [/COLOR][/SIZE][SIZE=2][COLOR=white]"Cilindrada: "[/COLOR][/SIZE][SIZE=2][COLOR=white]<<endl;[/COLOR]
    [COLOR=white]cin >>cil;[/COLOR]
    [COLOR=white]cout<<[/COLOR][/SIZE][SIZE=2][COLOR=white]"Potencia: "[/COLOR][/SIZE][SIZE=2][COLOR=white]<<endl;[/COLOR]
    [COLOR=white]cin >>pot;[/COLOR]
    [COLOR=white]cout<<[/COLOR][/SIZE][SIZE=2][COLOR=white]"Nr de antigos proprietarios: "[/COLOR][/SIZE][SIZE=2][COLOR=white]<<endl;[/COLOR]
    [COLOR=white]cin >>nprop;[/COLOR]
    [COLOR=white]r.in_pv(v,p);[/COLOR]
     
    [COLOR=white]}[/COLOR]
    [/SIZE][COLOR=white][SIZE=2]continue[/SIZE][SIZE=2];[/SIZE][/COLOR]
    [COLOR=white][SIZE=2]   case[/SIZE][SIZE=2]'s'[/SIZE][/COLOR][SIZE=2][COLOR=white]:[/COLOR]
    [COLOR=white]    exit(0);[/COLOR]
    [/SIZE][SIZE=2][COLOR=white]  default[/COLOR][/SIZE][SIZE=2][COLOR=white]:[/COLOR]
    [COLOR=white]    cout << [/COLOR][/SIZE][COLOR=white][SIZE=2]"Erro: Insira um caracter valido "[/SIZE][SIZE=2] << input << [/SIZE][SIZE=2]'\n'[/SIZE][/COLOR][SIZE=2][COLOR=white];[/COLOR]
    [/SIZE][SIZE=2][COLOR=white]  break[/COLOR][/SIZE][SIZE=2][COLOR=white];[/COLOR]
    [COLOR=white]}[/COLOR]
    [COLOR=white]}[/COLOR]
    
    [COLOR=white]}[/COLOR]
    [/SIZE] 
    
    Código:
    [SIZE=2][COLOR=#008000] 
    #include "cra.h"
    using namespace std;
    cra::void in_pv(veiculo v,proprietario p)
    {
    
    }
     
    [/COLOR][/SIZE]
    Proprietario.cpp

    Código:
     
    [SIZE=2][COLOR=#0000ff]#include[/COLOR][/SIZE][SIZE=2][/SIZE][SIZE=2][COLOR=#800000]<iostream>
    [/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]#include[/COLOR][/SIZE][SIZE=2][/SIZE][SIZE=2][COLOR=#800000]<string>
    [/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]#include[/COLOR][/SIZE][SIZE=2][/SIZE][SIZE=2][COLOR=#800000]"proprietario.h"[/COLOR][/SIZE]
    [SIZE=2][/SIZE][SIZE=2]proprietario::proprietario(string str_nome,[/SIZE][SIZE=2][COLOR=#0000ff]long[/COLOR][/SIZE][SIZE=2] sbi,string str_morada,[/SIZE][SIZE=2][COLOR=#0000ff]long[/COLOR][/SIZE][SIZE=2] stel)
    {
    nome = str_nome;
    bi=sbi;
    tel=stel;
    morada = str_morada;
    }
     
    string proprietario::getnome() [/SIZE][SIZE=2][COLOR=#0000ff]const
    [/COLOR][/SIZE][SIZE=2]{
    [/SIZE][SIZE=2][COLOR=#0000ff]return[/COLOR][/SIZE][SIZE=2] nome;
    };
     
    [/SIZE][SIZE=2][COLOR=#0000ff]void[/COLOR][/SIZE][SIZE=2][COLOR=#000000] proprietario::setnome(string str_nome)[/COLOR]
    {
    nome=str_nome;
    };
    string proprietario::getmorada() [/SIZE][SIZE=2][COLOR=#0000ff]const
    [/COLOR][/SIZE][SIZE=2]{
    [/SIZE][SIZE=2][COLOR=#0000ff]return[/COLOR][/SIZE][SIZE=2] morada;
    };
     
    [/SIZE][SIZE=2][COLOR=#0000ff]void[/COLOR][/SIZE][SIZE=2][COLOR=#000000] proprietario::setmorada(string str_morada)[/COLOR]
    {
    morada=str_morada; 
    };
     
    [/SIZE][SIZE=2][COLOR=#0000ff]long[/COLOR][/SIZE][SIZE=2][COLOR=#000000] proprietario::getnbi() [/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]const
    [/COLOR][/SIZE][SIZE=2]{
    [/SIZE][SIZE=2][COLOR=#0000ff]return[/COLOR][/SIZE][SIZE=2] bi;
    };
     
    [/SIZE][SIZE=2][COLOR=#0000ff]void[/COLOR][/SIZE][SIZE=2][COLOR=#000000] proprietario::setnbi([/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]long[/COLOR][/SIZE][SIZE=2][COLOR=#000000] sbi)[/COLOR]
    {
    bi=sbi;
    };
     
    [/SIZE][SIZE=2][COLOR=#0000ff]long[/COLOR][/SIZE][SIZE=2][COLOR=#000000] proprietario::gettel() [/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]const
    [/COLOR][/SIZE][SIZE=2]{
    [/SIZE][SIZE=2][COLOR=#0000ff]return[/COLOR][/SIZE][SIZE=2] tel;
    };
     
    [/SIZE][SIZE=2][COLOR=#0000ff]void[/COLOR][/SIZE][SIZE=2][COLOR=#000000] proprietario::settel([/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]long[/COLOR][/SIZE][SIZE=2][COLOR=#000000] stel)[/COLOR]
    {
    tel=stel;
    };
    [/SIZE] 
    

    Veiculo.cpp

    Código:
     
    [SIZE=2][COLOR=#0000ff]#include[/COLOR][/SIZE][SIZE=2][COLOR=#800000]<iostream>
    [/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]#include[/COLOR][/SIZE][SIZE=2][COLOR=#800000]<string>
    [/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]#include[/COLOR][/SIZE][SIZE=2][/SIZE][SIZE=2][COLOR=#800000]"veiculo.h"[/COLOR][/SIZE]
    [SIZE=2][/SIZE][SIZE=2]veiculo::veiculo(string str_matricula,string str_marca,string str_cor,string str_mod,[/SIZE][SIZE=2][COLOR=#0000ff]long[/COLOR][/SIZE][SIZE=2] n_cil,[/SIZE][SIZE=2][COLOR=#0000ff]long[/COLOR][/SIZE][SIZE=2] n_potencia,[/SIZE][SIZE=2][COLOR=#0000ff]long[/COLOR][/SIZE][SIZE=2] n_npp)
    {
    matricula=str_matricula;
    marca=str_marca;
    cor=str_cor;
    modelo=str_mod;
    cilindrada=n_cil;
    potencia=n_potencia;
    nproprietario=n_npp;
    }
     
    [/SIZE]
    Código:
     
    [SIZE=2][COLOR=#0000ff]#include[/COLOR][/SIZE][SIZE=2][COLOR=#800000]<iostream>
    [/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]#include[/COLOR][/SIZE][SIZE=2][/SIZE][SIZE=2][COLOR=#800000]<string>
    [/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]using[/COLOR][/SIZE][SIZE=2][/SIZE][SIZE=2][COLOR=#0000ff]namespace[/COLOR][/SIZE][SIZE=2][COLOR=#000000] std;[/COLOR][/SIZE]
    [SIZE=2] 
    [/SIZE][SIZE=2][COLOR=#0000ff]class[/COLOR][/SIZE][SIZE=2][COLOR=#000000] veiculo[/COLOR]
    {
    [/SIZE][SIZE=2][COLOR=#0000ff]private[/COLOR][/SIZE][SIZE=2][COLOR=#000000]:[/COLOR]
    string matricula;
    string marca;
    string cor;
    string modelo;
    [/SIZE][SIZE=2][COLOR=#0000ff]long[/COLOR][/SIZE][SIZE=2] cilindrada;
    [/SIZE][SIZE=2][COLOR=#0000ff]long[/COLOR][/SIZE][SIZE=2] potencia;
    [/SIZE][SIZE=2][COLOR=#0000ff]long[/COLOR][/SIZE][SIZE=2] nproprietario;[/SIZE]
     
    [SIZE=2][COLOR=#0000ff]public[/COLOR][/SIZE][SIZE=2][COLOR=#000000]:[/COLOR]
    veiculo();
    veiculo(string str_matricula,string str_marca,string str_cor,string str_modelo,[/SIZE][SIZE=2][COLOR=#0000ff]long[/COLOR][/SIZE][SIZE=2] n_cel,[/SIZE][SIZE=2][COLOR=#0000ff]long[/COLOR][/SIZE][SIZE=2] n_pot,[/SIZE][SIZE=2][COLOR=#0000ff]long[/COLOR][/SIZE][SIZE=2] n_npp);
    string getmatricula([/SIZE][SIZE=2][COLOR=#0000ff]void[/COLOR][/SIZE][SIZE=2]) [/SIZE][SIZE=2][COLOR=#0000ff]const[/COLOR][/SIZE][SIZE=2];
    [/SIZE][SIZE=2][COLOR=#0000ff]void[/COLOR][/SIZE][SIZE=2] setmatricula(string str_matricula);
    string getmarca([/SIZE][SIZE=2][COLOR=#0000ff]void[/COLOR][/SIZE][SIZE=2]) [/SIZE][SIZE=2][COLOR=#0000ff]const[/COLOR][/SIZE][SIZE=2];
    [/SIZE][SIZE=2][COLOR=#0000ff]void[/COLOR][/SIZE][SIZE=2] setmarca(string str_marca);
    string getcor([/SIZE][SIZE=2][COLOR=#0000ff]void[/COLOR][/SIZE][SIZE=2]) [/SIZE][SIZE=2][COLOR=#0000ff]const[/COLOR][/SIZE][SIZE=2];
    [/SIZE][SIZE=2][COLOR=#0000ff]void[/COLOR][/SIZE][SIZE=2] setcor(string str_cor);
    string getmodelo([/SIZE][SIZE=2][COLOR=#0000ff]void[/COLOR][/SIZE][SIZE=2]) [/SIZE][SIZE=2][COLOR=#0000ff]const[/COLOR][/SIZE][SIZE=2];
    [/SIZE][SIZE=2][COLOR=#0000ff]void[/COLOR][/SIZE][SIZE=2] setmodelo(string str_modelo);
    [/SIZE][SIZE=2][COLOR=#0000ff]long[/COLOR][/SIZE][SIZE=2] getcilindrada([/SIZE][SIZE=2][COLOR=#0000ff]void[/COLOR][/SIZE][SIZE=2]) [/SIZE][SIZE=2][COLOR=#0000ff]const[/COLOR][/SIZE][SIZE=2];
    [/SIZE][SIZE=2][COLOR=#0000ff]void[/COLOR][/SIZE][SIZE=2] setcilindrada([/SIZE][SIZE=2][COLOR=#0000ff]unsigned[/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]long[/COLOR][/SIZE][SIZE=2] n_cel);
    [/SIZE][SIZE=2][COLOR=#0000ff]long[/COLOR][/SIZE][SIZE=2] getpotencia([/SIZE][SIZE=2][COLOR=#0000ff]void[/COLOR][/SIZE][SIZE=2]) [/SIZE][SIZE=2][COLOR=#0000ff]const[/COLOR][/SIZE][SIZE=2];
    [/SIZE][SIZE=2][COLOR=#0000ff]void[/COLOR][/SIZE][SIZE=2] setpotencia([/SIZE][SIZE=2][COLOR=#0000ff]long[/COLOR][/SIZE][SIZE=2] n_pot);
    [/SIZE][SIZE=2][COLOR=#0000ff]long[/COLOR][/SIZE][SIZE=2] getnproprietario([/SIZE][SIZE=2][COLOR=#0000ff]void[/COLOR][/SIZE][SIZE=2]) [/SIZE][SIZE=2][COLOR=#0000ff]const[/COLOR][/SIZE][SIZE=2];
    [/SIZE][SIZE=2][COLOR=#0000ff]void[/COLOR][/SIZE][SIZE=2] setnproprietario([/SIZE][SIZE=2][COLOR=#0000ff]long[/COLOR][/SIZE][SIZE=2] n_npp);
    
    }; 
     
    [/SIZE]
    Código:
     
    #include[SIZE=2][/SIZE][SIZE=2][COLOR=#800000]<iostream>
    [/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]#include[/COLOR][/SIZE][SIZE=2][/SIZE][SIZE=2][COLOR=#800000]<string>
    [/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]using[/COLOR][/SIZE][SIZE=2][/SIZE][SIZE=2][COLOR=#0000ff]namespace[/COLOR][/SIZE][SIZE=2][COLOR=#000000] std;[/COLOR][/SIZE]
    [SIZE=2] 
    [/SIZE][SIZE=2][COLOR=#0000ff]class[/COLOR][/SIZE][SIZE=2][COLOR=#000000] proprietario[/COLOR]
    {
    [/SIZE][SIZE=2][COLOR=#0000ff]private[/COLOR][/SIZE][SIZE=2][COLOR=#000000]:[/COLOR]
    string nome;
    [/SIZE][SIZE=2][COLOR=#0000ff]long[/COLOR][/SIZE][SIZE=2] bi;
    string morada;
    [/SIZE][SIZE=2][COLOR=#0000ff]long[/COLOR][/SIZE][SIZE=2] tel;[/SIZE]
    [SIZE=2][COLOR=#0000ff]public[/COLOR][/SIZE][SIZE=2][COLOR=#000000]:[/COLOR]
    proprietario();
    proprietario(string str_nome,[/SIZE][SIZE=2][COLOR=#0000ff]long[/COLOR][/SIZE][SIZE=2] sbi,string str_morada,[/SIZE][SIZE=2][COLOR=#0000ff]long[/COLOR][/SIZE][SIZE=2] stel);
    string getnome([/SIZE][SIZE=2][COLOR=#0000ff]void[/COLOR][/SIZE][SIZE=2]) [/SIZE][SIZE=2][COLOR=#0000ff]const[/COLOR][/SIZE][SIZE=2];
    [/SIZE][SIZE=2][COLOR=#0000ff]void[/COLOR][/SIZE][SIZE=2] setnome(string str_nome);
    string getmorada([/SIZE][SIZE=2][COLOR=#0000ff]void[/COLOR][/SIZE][SIZE=2]) [/SIZE][SIZE=2][COLOR=#0000ff]const[/COLOR][/SIZE][SIZE=2];
    [/SIZE][SIZE=2][COLOR=#0000ff]void[/COLOR][/SIZE][SIZE=2] setmorada(string str_morada);
    [/SIZE][SIZE=2][COLOR=#0000ff]long[/COLOR][/SIZE][SIZE=2] getnbi([/SIZE][SIZE=2][COLOR=#0000ff]void[/COLOR][/SIZE][SIZE=2]) [/SIZE][SIZE=2][COLOR=#0000ff]const[/COLOR][/SIZE][SIZE=2];
    [/SIZE][SIZE=2][COLOR=#0000ff]void[/COLOR][/SIZE][SIZE=2] setnbi([/SIZE][SIZE=2][COLOR=#0000ff]long[/COLOR][/SIZE][SIZE=2] sbi);
    [/SIZE][SIZE=2][COLOR=#0000ff]long[/COLOR][/SIZE][SIZE=2] gettel([/SIZE][SIZE=2][COLOR=#0000ff]void[/COLOR][/SIZE][SIZE=2]) [/SIZE][SIZE=2][COLOR=#0000ff]const[/COLOR][/SIZE][SIZE=2];
    [/SIZE][SIZE=2][COLOR=#0000ff]void[/COLOR][/SIZE][SIZE=2] settel([/SIZE][SIZE=2][COLOR=#0000ff]long[/COLOR][/SIZE][SIZE=2] stel);
    
    };
     
    [/SIZE]
    Código:
    [SIZE=2][COLOR=#0000ff] 
    #include[/COLOR][/SIZE][SIZE=2][/SIZE][SIZE=2][COLOR=#800000]<iostream>
    [/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]#include[/COLOR][/SIZE][SIZE=2][/SIZE][SIZE=2][COLOR=#800000]<map>
    [/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]#include[/COLOR][/SIZE][SIZE=2][/SIZE][SIZE=2][COLOR=#800000]<string>
    [/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]#include[/COLOR][/SIZE][SIZE=2][/SIZE][SIZE=2][COLOR=#800000]"veiculo.h"
    [/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]#include[/COLOR][/SIZE][SIZE=2][/SIZE][SIZE=2][COLOR=#800000]"proprietario.h"
    [/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]using[/COLOR][/SIZE][SIZE=2][/SIZE][SIZE=2][COLOR=#0000ff]namespace[/COLOR][/SIZE][SIZE=2][COLOR=#000000] std;[/COLOR][/SIZE]
    [SIZE=2] 
    [/SIZE][SIZE=2][COLOR=#0000ff]class[/COLOR][/SIZE][SIZE=2][COLOR=#000000] cra[/COLOR]
    {
    [/SIZE][SIZE=2][COLOR=#0000ff]public[/COLOR][/SIZE][SIZE=2][COLOR=#000000]:[/COLOR]
    
    [/SIZE][SIZE=2][COLOR=#008000]map<string, veiculo>;
    map<long, Owner>;
    multimap<long, string>; 
    map<string, long>;
    [/COLOR][/SIZE][SIZE=2][COLOR=#008000]el_veiculo();
    [/COLOR][/SIZE][SIZE=2][COLOR=#008000]el_pv();
    [/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]void[/COLOR][/SIZE][SIZE=2] in_pv(veiculo v,proprietario p);
    [/SIZE][SIZE=2][COLOR=#0000ff]void[/COLOR][/SIZE][SIZE=2] el_veiculo(veiculo v);
    [/SIZE][SIZE=2][COLOR=#0000ff]void[/COLOR][/SIZE][SIZE=2] el_pv(veiculo v,proprietario p);
    [/SIZE][SIZE=2][COLOR=#008000]pesquisa();
    [/COLOR][/SIZE][SIZE=2]}
     
    [/SIZE]
    PS: Se alguém quiser dar sugestões ou dizer algo que possa estar a mais ou sugerir correcções,agradeceria muito!
     
  9. greatbunzinni

    greatbunzinni Power Member

    dicas:
    - void main() não existe! a função main() devolve sempre um int! Em C++ só existe int main() e int main(int, char**) e tudo o resto é violação das normas. Mau mau!
    - numa classe, se tens um atributo a private/protected e depois espetas com funções set e get para manipulá-lo, isso é sinal que devia ser public. Tu metes os atributos a private/protected para "escondê-los". Por consequência não faz sentido "esconderes" um atributo para depois abrires totalmente o acesso através de funções set e get. Voltas ao mesmo sitio mas tiveste de escrever mais dois métodos.
    - se passas variáveis em parâmetros e sabes que não as vais alterar então passa-as a const.

    Sobre a dúvida std::vector Vs std::map, a resposta é claríssima. Se quiseres uma lista estática de apenas um objecto então queres std::vector. Se queres uma função (no sentido de álgebra de conjuntos) que te dá uma imagem ao forneceres um objecto então o que queres é um std::map ou std::multimap. Neste caso como a relação é injectiva então o que queres é um std::map.
     
  10. ...

    Obrigada pelas dicas!Realmente foi uma falha ter colocado void em vez de int!Mas em relação ao resto do código,especificamente à função in_pv,que é que posso fazer?
     
  11. sapropel

    sapropel Power Member

    errado. ter metodos get/set para aceder a variaveis privadas numa classe é boa programação, mesmo quando esses membros set e get nao fazem qualquer tipo de manipulação.
    a razao é simples: no mundo real quando um projecto que pode chegar a milhoes de linhas de código e uma classe qualquer de repente precisa dum metodo get/set porque quer fazer um tipo de manipulação sobre essa variavel privada e de repente tens milhares de linhas de codigo em que mudas:
    class.variavel;
    para:
    class.getVariavel();

    se esses metodos tivessem feitos desde inicio, era so mudar a estrutura do metodo e pronto, o projecto todo era "updatado".
    basta ver as properties introduzidas em .net (ver c# keywords get e set)
     
  12. greatbunzinni

    greatbunzinni Power Member

    Ora lá está. A partir do momento que precisas de processar alguma coisa para aceder a uma variável então os métodos deixam automaticamente de ser do tipo get/set. E claro, nem é preciso dizer que a necessidade de se meter a alterar interfaces básicos a meio da viagem é sinal que o planeamento do projecto foi deficiente e/ou que a execução do mesmo está a deixar muito a desejar. Nesse caso não há métodos get/set que salvem nada.
     

Partilhar esta Página