Avatar billede hurra Novice
12. juni 2009 - 14:06 Der er 1 løsning

Multipel nedarvning og dynamisk anden base

Jeg har et arkitektonisk problem i mit program. Jeg har nogle måle instrument typer, e.g. en analyser og en generator. Så har nogle konkrete måleinstrumenter, nogle analysere, nogle er generatore og helt treide er både analysere og generatore.

Påp analyser og generator niveauet har jeg også filtre, og et måleinstrument der både indeholder en generator og en analyser må ikke kunne forveksles med et filter.

Når man så i koden har en opgave der skal løses med et måle instrument, e.g. en analyser, skal brugeren kunne vælge om han vil bruge en analyser eller et af de sammensatte instrumenter. Problemet er så, at det kan også være at man har brug for en generator, og til det skal man også kunne vælge et af de sammen satte.

et kode exempel:

class instrument;
class generator : public virtual instrument;
class analyser : public virtual instrument;
class sammensat : public virtual generator, virtual analyser;

class test
{
  public:
    analyser *a;
    generator *b;

    SetSammenSat(sammensat *x)
    {
      a = x; // Kan klart nok ikke lade sig gøre
      b = x;
    }
};

Hvordan løser jeg problemet smartest? Mit eneste forslag er at lade mit sammensatte instrument have referenser til de enkelte dele det indeholder, og så:
    SetSammenSat(sammensat *x)
    {
      a = x->analyser;
      b = x->generator;
    }
Men det giver mig så problemet, at sammensat ikke har nedarvet fra analyser og generator, og der kan være 1000 forskellige sammensatte instrumenter, e.g. nogle kun goså indeholde filtre, osv.
Avatar billede hurra Novice
30. november 2012 - 09:23 #1
Jeg lukker her, jeg kan ikke en gang huske hvad det her endte med.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester