2010-03-18 8 views
1

Nous avons cette situation:Liaison de classe dérivée - est-ce faux?

 

        Window Keyboard 
        ^  ^
        |  /
        ApplicationWindow 

si

class Window { } 
class Keyboard { } 
class AppWindow : public Window, public Keyboard { } 

Maintenant, Clavier veut accéder à une propriété dans ApplicationWindow, par exemple, il veut appeler getWidth du ApplicationWindow() propriété.

La solution que j'ai est de placer un pointeur vers un ApplicationWindow intérieur Clavier.

J'essaie d'utiliser l'héritage multiple ici comme composition, alors que je sais que la composition réelle est plus fortement encouragée, je voulais essayer MI.

En tout cas je besoin d'un lien de retour à la ApplicationWindow exemple de Clavier si je composition de toute façon ..

+0

Je considérerais de réviser ce genre de conception. Évidemment, vous essayez de coupler la classe de base avec ses dérivés. – AraK

Répondre

1

Je dirais que ce serait beaucoup plus propre à déplacer la propriété dans la Clavier de classe de base. ApplicationWindow aurait également accès à ApplicationWindow puisque ApplicationWindow étend le clavier.

Vous ne voulez pas que la classe de base ait besoin de connaître les sous-classes.

+0

J'ai pensé à ce sujet, et avec ce problème particulier, il ne peut pas être fait .. :) C'est pourquoi j'ai inclus le MI dans la question – bobobobo

+0

OK. Je suppose que ce que vous dites est, _Keyboard_ ne devrait tout simplement pas être capable de connaître la largeur de la _ApplicationWindow_. Si c'est le cas, il y a quelque chose qui ne va pas avec le design. – bobobobo

+0

Oui, cela semble étrange pour un clavier d'avoir besoin de savoir à propos de l'écran auquel il est connecté :). Peut-être avoir un écran redimensionné événement qui définit la largeur du clavier ou quelque chose si le clavier a besoin d'une largeur –