Avatar billede thomas_nj Nybegynder
17. oktober 2004 - 18:41 Der er 6 kommentarer og
1 løsning

Samarbejde imellem 2 klasser

Hej

  Jeg er ved at lave et snakespil. Jeg har valgt at opbygge det så jeg har en klasse der tager sig af banen og en der tager sig af slangen.

  Nu er jeg kommet dertil hvor at jeg skal til at lave snake klassen og derfor kom jeg til at tænke på det ville være lidt smartere hvis snake klassen selv kunne gå ind i min bane klasse og se om den har spist noget mad eller ramt vægen.

  Jeg kan gætte mig til at det sikkert er et eller andet med at jeg skal give constructeren til min snake klasse en pointer til det objekt jeg har obrettet med min bane klasse.

  Dette giver 2 spørgsmål:

  1) Er dette den rigtige måde at gribe det an på? Grunden til at jeg spørger er at mit gameloop i main efterhånden kommer til at bestå af rene funktionskald men samtidig virker det lidt pænere at mit snakeobjekt bare ved et test_hit(); kald selv fuldt ud kan teste om den er død.

  2) Hvordan gør jeg hvis jeg vil gøre så mit snake objekt kan manipulere med mit bane objekt? Hvis det bare er det med pointeren hvordan vil dette så se ud i praksis?
Avatar billede arne_v Ekspert
17. oktober 2004 - 18:50 #1
Ja det er den rigtige måde at gøre det på.

class B;

class A
{
  private:
      B *b;
  public:
      void foobar();
};

class B
{
  private:
      A *a;
  public:
      B(A *a);
};

void A::foobar()
{
  b = new B(this);
}

B::B(A *a)
{
  this->a = a;
}

[ikke testet så check selv for diverse bøffer !]
Avatar billede thomas_nj Nybegynder
18. oktober 2004 - 15:53 #2
Kigger lige på det.

  arne_v>> Gider du ikke lægge et svar hvori du fortæller hvordan man laver en int om til en string?

  int b=22;
  string a;

  Hvordan får jeg tallene i b flyttet over i a?
Avatar billede arne_v Ekspert
18. oktober 2004 - 16:10 #3
En mulighed:

stringstream tmp;
tmp << b;
a = tmp.str();
Avatar billede arne_v Ekspert
18. oktober 2004 - 16:10 #4
svar
Avatar billede thomas_nj Nybegynder
18. oktober 2004 - 16:27 #5
Glem lige ovenstående kan se at jeg stadig mangler lidt hjælp

#include <iostream>

using namespace std;


class test
{
public:
    test(int);
    ~test(void);
    void vis(void);
private:
    int tal;
};

test::test(int tal)
{
    this->tal=tal;
}

test::~test(void)
{

}

void test::vis(void)
{
    cout<<tal<<endl;
}


void hej(test *a)
{
    test *hej;
    hej=a;
    // -------hvordan får jeg nu kaldt vis?
}

int main()
{
    test a(2);
    hej(&a);
    return 0;
}

Jeg vil have funtionen hej til at kalde vis for objektet a, hvordan gør jeg helt præcis dette?
Avatar billede arne_v Ekspert
18. oktober 2004 - 16:31 #6
a->vis();

eller

hej->vis();

de peger jo på samme objekt.

Jeg kan ikke lide at funktionen og variabelen begg ehedder hej.
Avatar billede thomas_nj Nybegynder
18. oktober 2004 - 16:33 #7
Er jo kun et meget hurtigt eksempel så jeg kan se hvordan det virker.

  Mange tak for hælpen
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