fork(1) download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <ctype.h>
  5. enum console {nswitch=1,ps4,xbox,pc};
  6.  
  7. class Produto{
  8. protected:
  9. int codigoproduto;
  10. public:
  11.  
  12. virtual void ler();
  13. virtual float getPreco()=0;
  14. virtual int getTipo()=0;
  15. int getCodigo(){return codigoproduto;}
  16. };
  17. void Produto::ler(){
  18. printf("DIGITE O CODIGO DO PRODUTO:\n");
  19. scanf("%d",&codigoproduto);
  20. }
  21.  
  22. //////////////////////////// CARRO ///////////////////////
  23. class Carro: public Produto {
  24. private:
  25. float precocarro;
  26. char placa[50];
  27. int ano;
  28. char fabricante[50];
  29. char modelo[50];
  30. public:
  31. virtual void listar(int quant);
  32. virtual int getTipo();
  33. virtual void ler();
  34. int getAno(){return ano;}
  35. char* getplaca(){return placa;}
  36. char* getfabricante(){return fabricante;}
  37. char* getmodelo(){return modelo;}
  38. };
  39. int Carro::getTipo(){
  40. return 1;
  41. }
  42. void Carro::listar(int quant){
  43. for(int i=0;i<quant;i++){
  44. printf("PLACA%c\n",getplaca());
  45. printf("ANO:%c\n",getAno());
  46. printf("FABRICANTE:%c\n",getfabricante());
  47. printf("MODELO%d:\n",getmodelo());
  48. }
  49. }
  50.  
  51. void Carro::ler(){
  52. printf("ANO:\n");scanf("%d",&ano);fflush(stdin);
  53. printf("PLACA:\n");scanf("%[^\n]",placa);fflush(stdin);
  54. printf("MODELO:\n");scanf("%[^\n]",modelo);fflush(stdin);
  55. printf("FABRICANTE:\n");scanf("%[^\n]",fabricante);fflush(stdin);
  56. }
  57. ////////////// DVD ////////////////////////////
  58. class Dvd: public Produto{
  59. private:
  60. char titulo[50];
  61. char nomeatorprincipal[50];
  62. char nomediretor[50];
  63. char categoria[50];
  64. int anolancamento;
  65. float precodvd;
  66. public:
  67. void listar(int quant);
  68. virtual int getTipo();
  69. virtual void ler();
  70. char* getTitulo(){return titulo;}
  71. char* getDiretor(){return nomediretor;}
  72. int getAnolancamento(){return anolancamento;}
  73. char* getNomeato(){return nomeatorprincipal;}
  74. };
  75. int Dvd::getTipo(){return 2;}
  76. void Dvd::listar(int quant){
  77. for(int i=0;i<quant;i++){
  78. printf("TITULO:%c\n",getTitulo());
  79. printf("%ATOR:%c\n",getNomeato());
  80. printf("DIRETOR:%c\n",getDiretor());
  81. printf("ANO%d:\n",getAnolancamento());
  82. }
  83. }
  84. void Dvd::ler(){
  85. printf("ANO:\n");scanf("%d",&anolancamento);fflush(stdin);
  86. printf("TITULO:\n");scanf("%[^\n]",&titulo);fflush(stdin);
  87. printf("CATEGORIA:\n");scanf("%[^\n]",&categoria);fflush(stdin);
  88. printf("ATOR:\n");scanf("%[^\n]",&nomeatorprincipal);fflush(stdin);
  89. printf("DIRETOR:\n");scanf("%[^\n]",&nomediretor);fflush(stdin);
  90. }
  91.  
  92. class Jogo: public Produto {
  93. private:
  94. char console[30];
  95. float precojogo;
  96. char titulo[50];
  97. char categoria[50];
  98. int qtdplayers;
  99. public:
  100. void listar(int quant);
  101. virtual int getTipo();
  102. virtual void ler();
  103. char* getConsole(){return console;}
  104. void* getTitulo(){return titulo;}
  105. char* getCategoria(){return categoria;}
  106. int getQtdplayers(){return qtdplayers;}
  107. };
  108. int Jogo::getTipo(){return 3;}
  109. void Jogo::listar(int quant){
  110. for(int i=0;i<quant;i++){
  111. printf("\nTITULO:%c\n",getTitulo());
  112. printf("%CONSOLE:%c\n",getConsole());
  113. printf("CATEGORIA:%c\n",getCategoria());
  114. printf("NUMERO DE JOGADOREs%d:\n",getQtdplayers());
  115. }
  116. }
  117. void Jogo::ler(){
  118. printf("NUMERO DE JOGADORS:\n");scanf("%d",&qtdplayers);fflush(stdin);
  119. printf("TITULO:\n");scanf("%[^\n]",&titulo);fflush(stdin);
  120. printf("CATEGORIA:\n");scanf("%[^\n]",&categoria);fflush(stdin);
  121. printf("CONSOLE:\n");scanf("%[^\n]",&console);fflush(stdin);
  122. }
  123.  
  124. class VideoLocadora{
  125. private:
  126. Produto *v[100];
  127. int qtd;
  128. public:
  129. VideoLocadora();
  130. void ler();
  131. int existe(int cdg);
  132. void Inserir(Produto *d);
  133. void remover(int cdg);
  134. void listar(Produto *d);
  135. void desfazer(Produto *d);
  136. float getvalor(Produto *d);
  137. };
  138.  
  139.  
  140. //FACTORY method
  141. Produto* CriarNovoProduto(){
  142. char letra;
  143. do{
  144. printf("QUAL PRODUTO?:\n");
  145. printf("(J)OGO (C)ARRO (D)VD\n");
  146. letra=getchar();
  147. letra=tolower(letra);
  148. }while(letra!='j' && letra!='c' && letra!= 'd');
  149. switch(letra){
  150. case 'j':
  151. return new Jogo();
  152. case 'c':
  153. return new Carro();
  154. case 'd':
  155. return new Dvd();
  156. default:
  157. return NULL;
  158. }
  159. }
  160.  
  161. VideoLocadora::VideoLocadora(){
  162. qtd=0;
  163. }
  164. void VideoLocadora::ler(){
  165. v[qtd]=CriarNovoProduto();
  166. v[qtd]->ler();
  167. }
  168.  
  169. int VideoLocadora::existe(int cdg){
  170.  
  171. for(int i=0;i<qtd;i++){
  172. if(v[i]->getCodigo()==cdg)
  173. return i;
  174. }
  175. return -1;
  176. }
  177.  
  178. void VideoLocadora::Inserir(Produto *d){
  179. v[qtd]=d;
  180. qtd++;
  181. }
  182. void VideoLocadora::remover(int cdg){
  183. int pos=existe(cdg);
  184. if (pos>-1)
  185. {
  186. delete v[pos];
  187. v[pos] = v[qtd-1];
  188. qtd--;
  189. }
  190. }
  191.  
  192. int main(){
  193. VideoLocadora x;
  194.  
  195. x.ler();
  196.  
  197.  
  198. return 0;
  199. }
  200.  
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
prog.cpp: In function ‘Produto* CriarNovoProduto()’:
prog.cpp:151:22: error: invalid new-expression of abstract class type ‘Jogo’
      return new Jogo();
                      ^
prog.cpp:92:7: note:   because the following virtual functions are pure within ‘Jogo’:
 class Jogo: public Produto {
       ^~~~
prog.cpp:13:15: note: 	virtual float Produto::getPreco()
 virtual float getPreco()=0;
               ^~~~~~~~
prog.cpp:153:23: error: invalid new-expression of abstract class type ‘Carro’
      return new Carro();
                       ^
prog.cpp:23:7: note:   because the following virtual functions are pure within ‘Carro’:
 class Carro: public Produto {
       ^~~~~
prog.cpp:13:15: note: 	virtual float Produto::getPreco()
 virtual float getPreco()=0;
               ^~~~~~~~
prog.cpp:155:21: error: invalid new-expression of abstract class type ‘Dvd’
      return new Dvd();
                     ^
prog.cpp:58:7: note:   because the following virtual functions are pure within ‘Dvd’:
 class Dvd: public Produto{
       ^~~
prog.cpp:13:15: note: 	virtual float Produto::getPreco()
 virtual float getPreco()=0;
               ^~~~~~~~
stdout
Standard output is empty