elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: AIO elhacker.NET 2021 Compilación herramientas análisis y desinfección malware


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Consulta sobre herencia y cómo proceder
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Consulta sobre herencia y cómo proceder  (Leído 1,724 veces)
Cero++

Desconectado Desconectado

Mensajes: 52



Ver Perfil WWW
Consulta sobre herencia y cómo proceder
« en: 24 Diciembre 2018, 17:03 pm »

Buenas, miren en este ejercicio me pide que cree 3 clases, una llamada Tecla, otra llamada Pedal y otra llamada Instrumento (No tengo idea para que sirve esta). Bueno el tema es este, hice el código siguiendo los pasos que me detallaba el ejercicio, pero el tema es que no encuentro manera de hacerlo ya en el main, tengo una manera de hacerlo, pero no estaría siguiendo al pie de la letra el ejercicio, así que, a ver si me pueden orientar un poco por favor.

Consigna:
Código
  1. a. Defina una clase Tecla para representar una tecla de un piano. Cada tecla
  2. puede estar o no apretada, y tiene ademas una nota asociada (cuyo nombre se
  3. representará con un string). Su interfaz debe tener tener entonces:
  4. - un constructor que reciba el nombre de la nota
  5. - un método VerNota que retorne el nombre de la nota
  6. - un método Apretar que cambie el estado de la tecla a apretada.
  7. - un método Soltar que cambie el estado de la tecla a no apretada.
  8. - un método EstaApretada que retorne true si la tecla está apretada, false en caso
  9. contrario
  10. b. Defina una clase Pedal para representar el pedal de un piano. El pedal debe
  11. almacenar un valor (f loat ) que indica la presion que el musico ejerce sobre el pedal.
  12. El constructor debe inicializar la presion en 0 , y la clase debe tener metodos para
  13. modificarla y consultarla.
  14. c. Reutilizando las clases Tecla , Pedal e Instrumento :
  15. class Instrumento{
  16. virtual string VerTipo() { return "sin_nombre"; }
  17. };
  18. defina una clase Piano que modele un instrumento de tipo "piano" con solo 7 teclas
  19. (do”, “re”, “mi”, “fa”, “sol”, “la” y “si” ) y 1 pedal. La clase piano debe tener métodos
  20. para:
  21. - apretar una tecla, indicando el numero de tecla, y que retorne la nota que debería
  22. sonar.
  23. - soltar una tecla, indicando el numero de tecla
  24. - presionar el pedal, indicando la presion que se aplica

Código que hice:
Código
  1. #include <iostream>
  2. using namespace std;
  3. class Tecla{
  4. string nota; int tecla;
  5. public:
  6. Tecla(string _t){
  7. nota=_t;
  8. }
  9. string Ver_nota(){
  10. return nota;
  11. }
  12. void Apretar(){
  13. tecla=1;
  14. }
  15. void Soltar(){
  16. tecla=0;
  17. }
  18. bool Esta_apretada(){
  19. if(tecla!=0){
  20. return true;
  21. }
  22. return false;
  23. }
  24.  
  25. };
  26. class Pedal{
  27. float presion;
  28. public:
  29. Pedal(){
  30. presion=0;
  31. }
  32. void Aumentar_presion(float _x){
  33. presion=_x;
  34. }
  35. void Disminuir_presion(float _x){
  36. presion=_x;
  37. }
  38. float Ver_presion(){
  39. return presion;
  40. }
  41. };
  42.  
  43. class Ver_Tipo{
  44. public:
  45. virtual string Ver_tipo(){
  46. return "sin nombre";
  47. }
  48. };
  49.  
  50. class Piano{
  51. Tecla *T[7]; Pedal P;
  52. public:
  53. string Apretar_una_tecla(int _nro){
  54. T[_nro]->Apretar();
  55. return T[_nro]->Ver_nota();
  56. }
  57. void Soltar_una_tecla(int _nro){
  58. T[_nro]->Soltar();
  59. }
  60. void Presionar(float _f){
  61. P.Aumentar_presion(_f);
  62. }
  63.  
  64. };
  65. int main(int argc, char *argv[]) {
  66. Tecla *T[7]; //No se como proseguir...
  67. T[0]=new Tecla ("Do");
  68. T[1]=new Tecla ("Re");
  69. T[2]=new Tecla ("Mi");
  70. T[3]=new Tecla ("Fa");
  71. T[4]=new Tecla ("Sol");
  72. T[5]=new Tecla ("La");
  73. T[6]=new Tecla ("Si");
  74. return 0;
  75. }

Volví a releer la teoría, para ver si podía entenderlo mejor, pero no le encuentro la vuelta sinceramente


En línea

Código:
Ser diligente es lo ÚNICO que importa para lograr el éxito[c/ode]
MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Consulta sobre herencia y cómo proceder
« Respuesta #1 en: 24 Diciembre 2018, 17:56 pm »

La clase instrumento es la que tu has nombrado cómo Piano.

Dentro de main debes crear un objeto piano a partir de instrumento y debe guardar las siete teclas y un pueda. La forma de acceder a teclas y pedal será a partir de piano.


En línea

CalgaryCorpus


Desconectado Desconectado

Mensajes: 323


Ver Perfil WWW
Re: Consulta sobre herencia y cómo proceder
« Respuesta #2 en: 24 Diciembre 2018, 19:20 pm »

Te falta la clase Instrumento.
La clase piano deriva de instrumento
« Última modificación: 24 Diciembre 2018, 21:47 pm por CalgaryCorpus » En línea

Aqui mi perfil en LinkedIn, invitame un cafe aqui
Cero++

Desconectado Desconectado

Mensajes: 52



Ver Perfil WWW
Re: Consulta sobre herencia y cómo proceder
« Respuesta #3 en: 25 Diciembre 2018, 00:04 am »

Hice esto, no sé si cumple con lo que pide el ejercicio, a ver si me dan el visto bueno.

Código
  1. #include <iostream>
  2. using namespace std;
  3. class Instrumento{
  4. public:
  5. virtual string Ver_tipo(){
  6. return "Sin tipo";
  7. };
  8. };
  9. class Tecla{
  10. int tecla; string nota;
  11. public:
  12. Tecla (){
  13.  
  14. }
  15. Tecla(string _nom){
  16. nota=_nom;
  17. }
  18. string Ver_nota(){
  19. return nota;
  20. }
  21. void Apretar(){
  22. tecla=1;
  23. }
  24. void Soltar(){
  25. tecla=0;
  26. }
  27. bool Esta_apretada(){
  28. if(tecla==1){
  29. return true;
  30. }
  31. return false;
  32. }
  33.  
  34. };
  35. class Pedal{
  36. float presion;
  37. public:
  38. Presion(float _p=0){
  39. presion=_p;
  40. }
  41. void Aumentar_presion(float _f){
  42. presion=_f;
  43. }
  44. void Disminuir_presion(float _f){
  45. presion=_f;
  46. }
  47. float Ver_presion(){
  48. return presion;
  49. }
  50. };
  51. class Piano:public Tecla, public Pedal, public Instrumento{
  52. Tecla *T[7]; Pedal P;
  53. public:
  54. void Cargar_nota(){
  55. T[0]=new Tecla ("Do");
  56. T[1]=new Tecla ("Re");
  57. T[2]=new Tecla ("Mi");
  58. T[3]=new Tecla ("Fa");
  59. T[4]=new Tecla ("Sol");
  60. T[5]=new Tecla ("La");
  61. T[6]=new Tecla ("Si");
  62. }
  63. string Apretar_tecla(int _i){
  64. return T[_i]->Ver_nota();
  65. }
  66. void Soltar_tecla(int _i){
  67. T[_i]->Soltar();
  68. }
  69. void Presionar_pedal(float _f){
  70. P.Aumentar_presion(_f);
  71. }
  72. string Ver_tipo (){
  73. return "Piano";
  74. }
  75. };
  76. int main(int argc, char *argv[]) {
  77. Piano P;
  78. P.Cargar_nota();
  79. cout<<"Estas son las notas de cada tecla [1-7]"<<endl;
  80. cout<<endl;
  81. cout<<"Tecla 1: "<<P.Apretar_tecla(0)<<endl;
  82. cout<<"Tecla 2: "<<P.Apretar_tecla(1)<<endl;
  83. cout<<"Tecla 3: "<<P.Apretar_tecla(2)<<endl;
  84. cout<<"Tecla 4: "<<P.Apretar_tecla(3)<<endl;
  85. cout<<"Tecla 5: "<<P.Apretar_tecla(4)<<endl;
  86. cout<<"Tecla 6: "<<P.Apretar_tecla(5)<<endl;
  87. cout<<"Tecla 7: "<<P.Apretar_tecla(6)<<endl;
  88. cout<<endl<<endl;
  89. int i;
  90. cout<<"¿Que tecla desea presionar? [1-7]"; cin>>i;
  91. cout<<"Mostrando la nota que contiene la tecla nro "<<i<<": "<<P.Apretar_tecla(i+1)<<endl;
  92. cout<<"Su instrumento es de tipo : "<<P.Ver_tipo();
  93. return 0;
  94. }
« Última modificación: 25 Diciembre 2018, 02:21 am por Cero++ » En línea

Código:
Ser diligente es lo ÚNICO que importa para lograr el éxito[c/ode]
CalgaryCorpus


Desconectado Desconectado

Mensajes: 323


Ver Perfil WWW
Re: Consulta sobre herencia y cómo proceder
« Respuesta #4 en: 25 Diciembre 2018, 05:46 am »

El Piano es un tipo de Instrumento, no es un tipo de tecla y no es un tipo de pedal. No tiene sentido que haya derivación de teclas o.pedales.

En vez de definir el método cargar define y usa el constructor.

Si le pides al usuario el índice de las teclas que van de 1 a 7, por qué le sumas 1?

El método apretar del piano no ejecuta el método apretar de la tecla.
En línea

Aqui mi perfil en LinkedIn, invitame un cafe aqui
Cero++

Desconectado Desconectado

Mensajes: 52



Ver Perfil WWW
Re: Consulta sobre herencia y cómo proceder
« Respuesta #5 en: 25 Diciembre 2018, 17:52 pm »

El Piano es un tipo de Instrumento, no es un tipo de tecla y no es un tipo de pedal. No tiene sentido que haya derivación de teclas o.pedales.

En vez de definir el método cargar define y usa el constructor.

Si le pides al usuario el índice de las teclas que van de 1 a 7, por qué le sumas 1?

El método apretar del piano no ejecuta el método apretar de la tecla.

Con respecto al piano, entonces declaro un puntero a Instrumento que apunte a un piano y desde el puntero Instrumento manejo todo? Ya lo probé así y no me deja acceder a los métodos de piano, ya que Instrumento solo tiene el método "Ver_tipo", no te estoy entendiendo.

Si defino el constructor en Piano, ya el programa no me funciona, por eso declaré el método "Cargar", que sí me dejaba ver las teclas ya pre cargadas sin la necesidad de hacer que el usuario ingrese las notas.

No me dí cuenta, tenes razón con lo de sumarle 1 al valor que ingresa el usuario, en realidad tengo que restarle 1 para mostrar la posición correcta, my bad.

Ya acomodé el método apretar de Piano para que apriete la tecla  ;D

Con las otras dudas, me podrías ayudar? Ya que sigo sin entenderte, probé hacer lo que dijiste y eso fueron los resultados que obtuve, lo que te comenté más arriba.

Gracias por la ayuda  ;D
En línea

Código:
Ser diligente es lo ÚNICO que importa para lograr el éxito[c/ode]
CalgaryCorpus


Desconectado Desconectado

Mensajes: 323


Ver Perfil WWW
Re: Consulta sobre herencia y cómo proceder
« Respuesta #6 en: 26 Diciembre 2018, 02:29 am »

Aprende cómo se hace que una clase derive de otra y haz que Piano derive de Instrumento.
En línea

Aqui mi perfil en LinkedIn, invitame un cafe aqui
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Pregunta sobre herencia en SmallTalk
Programación General
astinx 0 2,430 Último mensaje 20 Febrero 2012, 22:32 pm
por astinx
Pregunta sobre herencia y polimorfismo
Programación C/C++
Rodrigosolari 2 2,223 Último mensaje 6 Mayo 2012, 08:51 am
por Rodrigosolari
Duda sobre herencia en C++
Programación C/C++
NekoOs 4 2,191 Último mensaje 18 Septiembre 2012, 00:42 am
por NekoOs
Duda sobre el tema de Herencia en c++
Programación C/C++
maikelowen 3 1,831 Último mensaje 10 Abril 2014, 21:51 pm
por maikelowen
Encontrado bug en linux, como proceder?
GNU/Linux
Hason 0 1,657 Último mensaje 6 Septiembre 2016, 14:31 pm
por Hason
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines