Avatar billede Slettet bruger
06. juni 2000 - 11:29 Der er 9 kommentarer og
3 løsninger

Pointere til objekter


Jeg er i gang med en opgave der skal registrere indbyggere på en ø.

En indbyggre bliver registreret i en klasse.

Når en indbygger bliver oprettet skal det vha. pointere være muligt at finde ud af om personen er gift med en enden indbygger, det skal kunne aflæses hvem forældrene/børnene er osv.

Spørgsmål:
Hvordan pointer jeg til et andet objekt i samme klasse??

ZAP

Avatar billede erikjacobsen Ekspert
06. juni 2000 - 11:37 #1
Som du peger på objekter af andre klasser. Der er ingen forskel.
Vis os hvad du har.
Avatar billede dmk Nybegynder
06. juni 2000 - 12:02 #2
Du har en klasse:

class x
{
  public:
  x* Partner;
...
}

Når x er gift, kan du blot sætte x.Partner=en anden instans af x (eller adressen på en anden instans af x, hvis ikke de er oprettet med NEW).

Dvs:
...
x person1;
x person2;
person1.Partner=&person2;

eller:

x* person1=new x;
x* person2=new x;
person1->Partner=person2;



DMK
Avatar billede Slettet bruger
06. juni 2000 - 12:37 #3
Indtil videre er jeg kommet så langt:

class Indbygger
{
    private:
  char cpr_nummer[10];
  char indbygger_navn[];
  char udflytter_region[];
  int antal_boern;
  Date doedsdag;
  Date tilflytningsdato;
  Date fraflytningsdato;
  indbygger *foraeldre=NULL;
  indbygger *boern=NULL;
  indbygger *aegtefaelle=NULL;

  public:
  Indbygger(char cpr[10], char navn[]);
  Indbygger(char cpr[10], char navn[], Date dato);
  void set_fraflytning(Date d, char region[]);
  void set_gift(Indbygger &aegte);
  void set_doed(Date d);
  void set_skilsmisse(Indbygger &aegte);
  void set_barn(*boern);
  void set_tilflytning(Date dato);
};



  Indbygger::Indbygger(char cpr[10], char navn[])
  {
  cpr_nummer = cpr;
  indbyger_navn = navn;
  }

  Indbygger::Indbygger(char cpr[10], char navn[], Date dato)
  {
  cpr_nummer = cpr;
  indbyger_navn = navn;
  tilflytningsdato = dato;
  }

  void Indbygger::set_fraflytning(Date d, char region[])
  {
  fraflytningsdato = d;
  udflytter_region=region;
  }

  void Indbygger::set_gift(Indbygger &aegte)
  {
  aegtefaelle=&aegte;

  }

Det er her problemet opstår, pointeren skal sammenkæde to objekter af klassen Indbygger til at være gift.   
Avatar billede erikjacobsen Ekspert
06. juni 2000 - 12:42 #4
Mener du ikke bare

Indbygger *foraeldre=NULL;
Indbygger *boern=NULL;
Indbygger *aegtefaelle=NULL;

altså med stort I.
Avatar billede erikjacobsen Ekspert
06. juni 2000 - 12:44 #5
Hovsa, og i set_gift skal du nok

  void Indbygger::set_gift(Indbygger* aegte)
  {
        aegtefaelle=aegte;
  }

og så kalde den med noget, der er en pointer. I dit eksempel får du nok ikke brug for at
tage adressen på et statisk object, med &-operatoren. Alle dine objekter bør være dynamiske.
Avatar billede dmk Nybegynder
06. juni 2000 - 12:49 #6
Hvis du vil kæde to personer sammen som skal være gift, så kan følgende bruges:

void Indbygger::set_gift(Indbygger &aegte)
{
  aegtefaelle=&aegte;
  aegte.aegtefaelle=this;
}

Så vil de to personers aegtefaelle-pointer pege på hinanden.

DMK
Avatar billede soepro Nybegynder
06. juni 2000 - 13:17 #7
Skal du gemme dine data efterfølgende ??? Så er pointere IKKE løsningen. Den nemmeste måde at lave kryds-referencerne på er så at give hver indbygger et entydigt nummer. Hermed kan du blot sætte aegtefaelle, barn1 og barn2 til dette indbygger nummer:

Indbygger::set_gift(Indbygger &aegte)
{
  aegtefaelle          = aegte.indbyggernr;
  aegte.aegtefaelle = indbyggernr;
}

Hermed kan du så (også) organisere eller sortere din "liste" (eller hvordan du nu har tænkt dig at lave det) som du har lyst til.
Avatar billede erikjacobsen Ekspert
06. juni 2000 - 13:50 #8
Det ligner en skoleopgave, så mon ikke det bare er for at komme til at lege lidt med pointere.
Man kan nu godt bygge en automatisk persistens ovenpå pointere, men man burde jo
database-vejen...
Avatar billede soepro Nybegynder
06. juni 2000 - 15:29 #9
erikjacobsen >> Du har sikkert ret, derfor er det også vigtigt at slå fast hvilke problemer det evt. kan give. "Automatisk peristens" lyder interessant - hvad er det ???
Avatar billede erikjacobsen Ekspert
06. juni 2000 - 15:35 #10
Det er bare at kunne lægge siden objekter på disken - også selv om der er pointere - og så
læse dem ind næste gang man kører programmet. Jeg har ikke set (men mener at jeg har hørt)
det implementeret i C++. Jeg har set det i Delphi og Java.
Avatar billede erikjacobsen Ekspert
06. juni 2000 - 21:04 #11
...sine objekter... altså, hvor er jeg blevet dorli te å staw
Avatar billede soepro Nybegynder
07. juni 2000 - 08:43 #12
Hvis man kan i Delphi vil man også kunne i C++ Builder. (Det ER Delphi med en C++ compiler under.)
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