Pregunta

Tengo una función que 2 clases derivadas utilizan, pero el tercero no es así, ¿tendría sentido que acaba de salir en la clase base, a pesar de que una de las 3 clases derivadas no lo usa?

La única manera de que pudiera pensar en no permitir la tercera clase es la de crear básicamente una clase intermedia que se deriva de la base, entonces el 2 que utilizan la función común se derivan de la segunda clase.

¿Es posible evitar que la tercera clase del uso de la función, mientras que dejar que los dos que se supone que debe utilizar, usarlo?

¿Eso sólo parecen ir por la borda, quiero decir, siempre y cuando no me "trato" para llamar a la función de la tercera clase, que no debería ser un problema, yo sólo estaba interesado si había una manera de evitar que todos juntos sin un montón de problemas.

¿Fue útil?

Solución

No hay una manera de hacerlo directamente. Básicamente, cuando subclase, que está diciendo la subclase es una versión más específica de la clase base.

En este caso, usted está tratando de decir "la subclase es una versión más específica de la clase base, except for the fact that it shouldn't be able to touch XXX". Eso de, en esencia, la violación de la principio de sustitución de liskov .

La mejor manera de manejar esto es agregar una segunda clase base de la jerarquía, que es creo que la solución que usted menciona.

Básicamente, hacer su jerarquía:

base
 | \----   subclass without feature available
 |
 \--base+feature
       \--subclass one with specific feature
       \--subclass two with specific feature

Otros consejos

Se puede hacer esta función virtual. A continuación, reemplace la función de la tercera clase y lanzar una excepción. Se evitará que los desarrolladores utilizar la función en la tercera clase.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top