Logo Hardware.com.br
samara.shammye
samara.shamm... Membro Junior Registrado
60 Mensagens 1 Curtida

Programação C++

#1 Por samara.shamm... 30/03/2013 - 00:19
Dado a classe Produto, e a Classe DVD. DVD é subclasse de Produto.
Tem-se um vector do tipo Produto e esse vector, armazena vários produtos, inclusive DVD.
Em certo momento, tem-se a necessidade de alterar dados de alguns dos objetos que estão nesse vector de Produtos. Porém, da forma usual, objeto->setMetodo(variavel);
só funciona para os os atributos específicos de produtos. Aos atributos da subclasse, não é possivel acessar através desse ponteiro.

Como concertar isso? Isto é, como modificar os atributos específicos da subclasse de um objeto que está dentro de um vetor de Produto ?

Obrigada a qem puder ajudar e o fizer.


bool Sistema::alterarDadosDoProduto(int _codigo)
{
int a=0;
vector<Produto*>:: iterator i;
for( i=cesto.begin(); i!=cesto.end(); i++)
{
if( (*i)->getCodigo()==_codigo)
{
a++;
if (cesto[a]->getTipo()==1)
{
//DVD
// A - filme, B-Show, C-Software
if (cesto[a]->getIdentificador()=="A" ||cesto[a]->getIdentificador()=="a&quot
{
int abc;
cout<<"\n|---Alterar DVD Filme-----|";
cout<<"\n|1- Nome: ----------------|";
cout<<"\n|2- Preco:----------------|";
cout<<"\n|3- Marca:----------------|";
cout<<"\n|4- Quantidade:-----------|";
cout<<"\n|5- Diretor:--------------|";
cout<<"\n|6- Ano de Lancamento: ---|";
cout<<"\n|7- Sair:-----------------|";
cout<<"\n|-------------------------|";
cin>>abc;
switch(abc)
{
case 1:
{
string _nome;
cout<<"\n Informe o novo nome: ";
cin>>_nome;
cesto[a]->setNome(_nome);
return true;
break;
}
case 2:
{
float _preco;
cout<<"\n Informe o novo preco: ";
cin>>_preco;
cesto[a]->setPreco(_preco);
return true;
break;
}
case 3:
{
string _marca;
cout<<"\n Informe a marca: ";
cin>>_marca;
cesto[a]->setMarca(_marca);
return true;
break;
}
case 4:
{
int _qtd;
cout<<"\n Informe a nova quantidade: ";
cin>>_qtd;
cesto[a]->setQuantNoEstoque(_qtd);
return true;
break;
}
case 5:
{
string _diretor;
cout<<"\n Informe o novo diretor: ";
cin>>_diretor;
cesto[a]->getCesto()->setDiretor(_diretor);
return true;
break;
}
case 6:
{
int ano;
cout<<"\n Informe o novo ano de Lancamento: ";
cin>>ano;
cesto[a]->getCesto()->setAnoLancamento(ano);
return true;
break;
}
case 7:
{
return false;
}
default:
{
cout<<"\n Opcao invalida!";
return false;
}
}//fim switch abc
}//fim if identificador DVD
else if (cesto[a]->getCesto()->getIdentificador()=="B" ||cesto[a]->getCesto()->getIdentificador()=="b&quot
{

int abc;
cout<<"\n|---Alterar DVD Show------|";
cout<<"\n|1- Nome: ----------------|";
cout<<"\n|2- Preco:----------------|";
cout<<"\n|3- Marca:----------------|";
cout<<"\n|4- Quantidade:-----------|";
cout<<"\n|5- Artista:--------------|";
cout<<"\n|6- Numero de Musicas: ---|";
cout<<"\n|7- Sair:-----------------|";
cout<<"\n|-------------------------|";
cin>>abc;
switch(abc)
{
case 1:
{
string _nome;
cout<<"\n Informe o novo nome: ";
cin>>_nome;
cesto[a]->setNome(_nome);
return true;
break;
}
case 2:
{
float _preco;
cout<<"\n Informe o novo preco: ";
cin>>_preco;
cesto[a]->setPreco(_preco);
return true;
break;
}
case 3:
{
string _marca;
cout<<"\n Informe a marca: ";
cin>>_marca;
cesto[a]->setMarca(_marca);
return true;
break;
}
case 4:
{
int _qtd;
cout<<"\n Informe a nova quantidade: ";
cin>>_qtd;
cesto[a]->setQuantNoEstoque(_qtd);
return true;
break;
}
case 5:
{
string _artista;
cout<<"\n Informe o novo artista: ";
cin>>_artista;
cesto[a]->getCesto()->setArtista(_artista);
return true;
break;
}
case 6:
{
int nMusicas;
cout<<"\n Informe o numero de musicas: "
cin>>nMusicas;
cesto[a]->setAnoLancamento(nMusicas);
return true;
break;
}
case 7:
{
return false;
}
default:
{
cout<<"\n Opcao invalida!";
return false;
}
}//fim switch abc
}//fim if interno
else if (cesto[a]->getIdentificador()=="C" ||cesto[a]->getIdentificador()=="c&quot
{
int abc;
cout<<"\n|---Alterar DVD Software--|";
cout<<"\n|1- Nome: ----------------|";
cout<<"\n|2- Preco:----------------|";
cout<<"\n|3- Marca:----------------|";
cout<<"\n|4- Quantidade:-----------|";
cout<<"\n|5- Versao-:--------------|";
cout<<"\n|6- Requisitos: ----------|";
cout<<"\n|7- Sair:-----------------|";
cout<<"\n|-------------------------|";
cin>>abc;
switch(abc)
{
case 1:
{
string _nome;
cout<<"\n Informe o novo nome: ";
cin>>_nome;
cesto[a]->setNome(_nome);
return true;
break;
}
case 2:
{
float _preco;
cout<<"\n Informe o novo preco: ";
cin>>_preco;
cesto[a]->setPreco(_preco);
return true;
break;
}
case 3:
{
string _marca;
cout<<"\n Informe a marca: ";
cin>>_marca;
cesto[a]->setMarca(_marca);
return true;
break;
}
case 4:
{
int _qtd;
cout<<"\n Informe a nova quantidade: ";
cin>>_qtd;
cesto[a]->setQuantNoEstoque(_qtd);
return true;
break;
}
case 5:
{
string _versao;
cout<<"\n Informe a nova versao: ";
cin>>_versao;
cesto[a]->setVersao(_versao);
return true;
break;
}
case 6:
{
string _requisitos;
cout<<"\n Informe os requisitos (SO): "
cin>>_requisitos;
cesto[a]->setRequisitosDoSistema(_requisitos);
return true;
break;
}
case 7:
{
return false;
}
default:
{
cout<<"\n Opcao invalida!";
return false;
}
}//fim switch abc
}
else
{
cout<<"\n Opcao Invalida! ";
return false;
}
}// fim if tipo
else if (cesto[a]->getTipo()==2)
{
//livro
int abc;
cout<<"\n|---Alterar LIVRO---------|";
cout<<"\n|1- Nome: ----------------|";
cout<<"\n|2- Preco:----------------|";
cout<<"\n|3- Marca:----------------|";
cout<<"\n|4- Quantidade:-----------|";
cout<<"\n|5- Autor:----------------|";
cout<<"\n|6- Genero:---------------|";
cout<<"\n|7- Sair:-----------------|";
cout<<"\n|-------------------------|";
cin>>abc;
switch(abc)
{
case 1:
{
string _nome;
cout<<"\n Informe o novo nome: ";
cin>>_nome;
cesto[a]->setNome(_nome);
return true;
break;
}
case 2:
{
float _preco;
cout<<"\n Informe o novo preco: ";
cin>>_preco;
cesto[a]->setPreco(_preco);
return true;
break;
}
case 3:
{
string _marca;
cout<<"\n Informe a marca: ";
cin>>_marca;
cesto[a]->setMarca(_marca);
return true;
break;
}
case 4:
{
int _qtd;
cout<<"\n Informe a nova quantidade: ";
cin>>_qtd;
cesto[a]->setQuantNoEstoque(_qtd);
return true;
break;
}
case 5:
{
string autor;
cout<<"\n Informe o autor: ";
cin>>autor;
cesto[a]->setAutor(autor);
return true;
break;
}
case 6:
{
string genero;
cout<<"\n Informe o genero: ";
cin>>genero;
cesto[a]->setGenero(genero);
return true;
break;
}
case 7:
{
return false;
}
default:
{
cout<<"\n Opcao invalida!";
return false;
}
}//fim switch abc

} else if (cesto[a]->getTipo()==3)
{
//Perfume
int abc;
cout<<"\n|---Alterar PERFUME ------|";
cout<<"\n|1- Nome: ----------------|";
cout<<"\n|2- Preco:----------------|";
cout<<"\n|3- Marca:----------------|";
cout<<"\n|4- Quantidade:-----------|";
cout<<"\n|5- Qtde em Ml:-----------|";
cout<<"\n|6- Sair:-----------------|";
cout<<"\n|-------------------------|";
cin>>abc;
switch(abc)
{
case 1:
{
string _nome;
cout<<"\n Informe o novo nome: ";
cin>>_nome;
cesto[a]->setNome(_nome);
return true;
break;
}
case 2:
{
float _preco;
cout<<"\n Informe o novo preco: ";
cin>>_preco;
cesto[a]->setPreco(_preco);
return true;
break;
}
case 3:
{
string _marca;
cout<<"\n Informe a marca: ";
cin>>_marca;
cesto[a]->setMarca(_marca);
return true;
break;
}
case 4:
{
int _qtd;
cout<<"\n Informe a nova quantidade: ";
cin>>_qtd;
cesto[a]->setQuantNoEstoque(_qtd);
return true;
break;
}
case 5:
{
int qtde;
cout<<"\n Informe a quantidade em ml: ";
cin>>qtde;
cesto[a]->setQtdEmMl(qtde);
return true;
break;
}
case 6:
{
return false;
}
default:
{
cout<<"\n Opcao invalida!";
return false;
}
}//fim switch abc

}else if (cesto[a]->getTipo()==4)
{
//relogio
int abc;
cout<<"\n|---Alterar RELOGIO-------|";
cout<<"\n|1- Nome: ----------------|";
cout<<"\n|2- Preco:----------------|";
cout<<"\n|3- Marca:----------------|";
cout<<"\n|4- Quantidade:-----------|";
cout<<"\n|5- Tipo:-----------------|";
cout<<"\n|6- Sair:-----------------|";
cout<<"\n|-------------------------|";
cin>>abc;
switch(abc)
{
case 1:
{
string _nome;
cout<<"\n Informe o novo nome: ";
cin>>_nome;
cesto[a]->setNome(_nome);
return true;
break;
}
case 2:
{
float _preco;
cout<<"\n Informe o novo preco: ";
cin>>_preco;
cesto[a]->setPreco(_preco);
return true;
break;
}
case 3:
{
string _marca;
cout<<"\n Informe a marca: ";
cin>>_marca;
cesto[a]->setMarca(_marca);
return true;
break;
}
case 4:
{
int _qtd;
cout<<"\n Informe a nova quantidade: ";
cin>>_qtd;
cesto[a]->setQuantNoEstoque(_qtd);
return true;
break;
}
case 5:
{
bool tipo;
cout<<"\n Informe o tipo [0- Analogico; 1-Digital]: ";
cin>>tipo;
cesto[a]->setTipoRelogio(tipo);
return true;
break;
}
case 6:
{
return false;
}
default:
{
cout<<"\n Opcao invalida!";
return false;
}
}//fim switch abc

}//fecha o if interno
}//if externo

}//for
if (a==0)
{
cout<<"\n codigo nao encontrado!"<<endl;
return false;
}


© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal