Anuncio

Colapsar
No hay ningún anuncio todavía.

duda sobre herencia

Colapsar
X
 
  • Filtro
  • Hora
  • Mostrar
Borrar todo
nuevos mensajes

  • C/C++ duda sobre herencia

    Cuando definimos una clase derivada de una clase base, todos los datos y métodos públicos son heredados pero no los protegidos. Entonces si se heredan métodos que trabajan generalmente con los datos de la clase base; ¿en la clase derivada tendríamos que definir esos datos nuevamente?

    Entonces, ¿cuando se instancia una clase derivada, esta tiene los datos que son privated en la clase base, pero no puedo acceder a estos a través del objeto?. Pero se podrían acceder a trabes de un puntero de la clase base o no?

    saludos
    Por más bella o elegante que sea la teoría, si los resultados no la acompañan, está mal.

  • #2
    Re: duda sobre herencia

    Los protegidos sí se heredan, son los privados los que no.

    Por lo general, los miembros privados se crean para que otros miembros (públicos) hagan uso de ellos. Si ningún miembro de la misma clase hace uso de un miembro privado, entonces ese miembro jamás será utilizado, verdad? Con herencia pasa lo mismo. Los miembros públicos y protegidos de la clase base son heredados por la clase hija. Si no los sobrescribes, entonces esos miembros usarán la versión que ya existía en la base, y esa versión puede acceder a miembros privados sin problemas.

    Si tienes que sobrescribir el método heredado (público o protegido) que accede a los privados, entonces la versión sobrescrita no puede hacer uso de los métodos privados heredados. Hay dos soluciones:

    - llamar explícitamente, dentro de la función que sobreescribe, al método heredado. Se hace mediante la notación ClaseBase::nombreMetodo(). Este método tiene la desventaja que no podemos cambiar el comportamiento del método heredado, sólo sé pueden añadir cosas al principio (antes de la llamada) o después.

    - cambiar los métodos privados a protegidos, que sí son heredados, pero no pueden ser usados fuera del objeto.

    Los métodos privados no pueden ser sobrescritos. Tú puedes declarar uno con el mismo nombre, pero los miembros de la clase base seguirán usando la versión original. Los miembros de la clase hija usarán la nueva versión (porque ni siquiera sabrán que existe la otra).

    En general, haz miembros privados sólo para ser usados en los miembros públicos o protegidos de la misma clase. Si quieres usarlos en clases hijas, entonces hazlos protected, no privados.
    La única alternativo a ser Físico era ser etéreo.
    @lwdFisica

    Comentario


    • #3
      Re: duda sobre herencia

      Por si aporta algo a la pregunta original: una práctica hasta cierto punto común es tener campos privados, pero que se pueda acceder a su valor a través de un método público o protegido. De este modo, una aplicación posible es que las clases derivadas puedan conocer su valor, pero no modificarlo. Otra, en sentido contrario, es que la modificación del valor sólo se pueda hacer a través de un método que controle que los valores del campo siempre pertenezcan a un rango de valores permitidos.
      A mi amigo, a quien todo debo.

      Comentario

      Contenido relacionado

      Colapsar

      Trabajando...
      X