Utilizzo di interfacce parzialmente implementate

2

Considera la seguente gerarchia nella notazione C ++:

class A
    {
    public:
        virtual void doStuff()=0;
        virtual void doOtherStuff()=0;
    };

class B:public A
    {
    public:
        void doStuff();
        void doOtherStuff();
    };

class C:public A
    {
    public:
        void doStuff();
        void doOtherStuff();
    };

Supponiamo ora che il codice per doStuff sia identico in B e C. Qual è la migliore pratica di

  • implementare doStuff in una classe D: pubblico A e lasciare che B e C derivino da A
  • Lascia che il compito reale venga eseguito in una funzione chiamata da doStuff sia in B che in C

In qualche modo quest'ultimo sembra più pulito, vero? Va notato che ci sono altri metodi in B e C con implementazioni comuni, e che nel modello di sottostringa, il concetto di D non esiste.

    
posta user877329 10.01.2014 - 17:13
fonte

1 risposta

1

Creerei una classe E per mantenere l'implementazione condivisa di doStuff

class E : class A
{
override doStuff() {}
}

e hanno le classi B e C ereditate da E. Ciò consente di mantenere l'ereditarietà se B e C devono ancora essere tipi derivati da A, ma consente ad A e altre derivazioni di non condividere la stessa implementazione e B e C

    
risposta data 10.01.2014 - 17:58
fonte