Avatar billede ahara Nybegynder
28. maj 2004 - 20:13 Der er 9 kommentarer og
1 løsning

Aggregering i C++

Jeg har en aggregeringsstruktur hvor en robot "består af" en motor. Nu vil jeg så gerne kunne oprette et motor objekt i robot klassen, så jeg kan benytte det i followtape funktionen. Hvordan gør jeg det?

I må gerne vise et eksempel, gerne med min kode.

På forhånd tak

AHR

**** Koden er her ****

class Robot
{
private:
    int ball_count;
public:
    Robot(int ballcount)
    {
        ball_count=ballcount;
    }

    void followTape();
};

int main()
{   
    Robot r1(0);
    return 0;
}
Avatar billede arne_v Ekspert
28. maj 2004 - 20:18 #1
Der er vel to muligheder:

class Robot
{
private:
    int ball_count;
    Motor *mot;
public:
    Robot(int ballcount, Motor *m)
    {
        ball_count=ballcount;
        mot = m;
    }

    void followTape();
};

og:

class Robot
{
private:
    int ball_count;
    Motor *mot;
public:
    Robot(int ballcount)
    {
        ball_count=ballcount;
        mot = new Motor();
    }

    void followTape();
};

Umiddelbart vil jeg mene at den første passer bedst me daggregation og
den sidste med composition.
Avatar billede ahara Nybegynder
28. maj 2004 - 20:24 #2
Ok. Tak. Hvordan opretter jeg så et nyt Robot objekt fra main? Skal det være Robot r1(0) eller skal der flere parametre på?

Mvh
AHR
Avatar billede arne_v Ekspert
28. maj 2004 - 20:26 #3
Det skal jo nok være:

Robot *r = new Robot(0, new Motor());

eller:

Robot *r = new Robot(0);

alt efter om du vælger den ene eller den anden.
Avatar billede arne_v Ekspert
28. maj 2004 - 20:27 #4
Ja - strengt taget behøver det ikke at være en pointer, men ...
Avatar billede arne_v Ekspert
28. maj 2004 - 20:27 #5
og et svar
Avatar billede ahara Nybegynder
28. maj 2004 - 20:34 #6
Min kode ser nu ud som følger. Desværre vil det stadig ikke kompileres. Fejlen jeg får er "Syntax error before '*'" og det er i "Motor *mot;" linien.

Tak igen

**** kode ****
class Robot
{
private:
    int ball_count;
    Motor *mot;
public:
    Robot(int ballcount, Motor *m)
    {
        ball_count=ballcount;
        mot = m;
    }
    void followTape();
};

int main()
{   
    Robot *r = new Robot(0, new Motor());
    return 0;
}
Avatar billede arne_v Ekspert
28. maj 2004 - 20:36 #7
Motor skal naturligvis erklæres før Robot
Avatar billede ahara Nybegynder
28. maj 2004 - 20:57 #8
Det virker nu tusind tak. Jeg har blot et sidste spg. jeg håber du kan svare på. Hvordan bruger jeg mit motor objekt og de funktioner det kan tilgå i funktionen followTape()?

Mvh
AHR
Avatar billede arne_v Ekspert
28. maj 2004 - 21:02 #9
void Robot::followTape()
{
  mot->etellerandet();
}
Avatar billede ahara Nybegynder
28. maj 2004 - 21:04 #10
Takker :o) - det virker som det skal
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