Avatar billede conrad Nybegynder
10. oktober 2003 - 18:31 Der er 10 kommentarer og
1 løsning

getters (pointere)

så er den gal igen

jeg har følgende getter

list<double> TrustValue::getList()
{
return list;
}

hvor list er defineret i header filen som list<double> list;

Dette virker ikke efter hensigten( dvs object.list og object.getList() indeholder ikke det samme når jeg skriver det ud)

Hvad er der galt?
Avatar billede arne_v Ekspert
10. oktober 2003 - 18:33 #1
Jeg vil tro at du mener:

list<double> *list;  // skal new'es i constructor

list<double> *TrustValue::getList()
{
  return list;
}
Avatar billede arne_v Ekspert
10. oktober 2003 - 18:35 #2
Din konstruktion vil faktisk lave en kopi af objektet.
Avatar billede conrad Nybegynder
10. oktober 2003 - 18:44 #3
arne nu mens jeg har dig

1)
void func(Obj* o)
{

}

2) void
Avatar billede arne_v Ekspert
10. oktober 2003 - 18:46 #4
Øh - hvad er spørgsmålet ?
Avatar billede conrad Nybegynder
10. oktober 2003 - 18:46 #5
hmm jeg ved ikke hvad der skete der, jeg prøver igen

1) void f(Obj* o)
{
  o->func();
}

2)
void f(Obj& o)
{
o.func();
}

3)
void f(Obj o)
{
  o.func();
}

Hvad er forskellen på 2 og 3?
Avatar billede arne_v Ekspert
10. oktober 2003 - 18:53 #6
#1 = klassisk C pointer
#2 = referance a la java
#3 = by value d.v.s. kopiering af objektet
Avatar billede conrad Nybegynder
10. oktober 2003 - 20:14 #7
Tak Arne, lige inden vi lukker:
Dvs #3 kan/bør helt undgås hvis man prøver at programmere a la Java?
(læg også lige et svar da du har svaret på det oprindelige spørgsmål)
Avatar billede arne_v Ekspert
10. oktober 2003 - 20:23 #8
#3 bør undgåes da den er meget resource krævende.
Avatar billede arne_v Ekspert
10. oktober 2003 - 20:23 #9
svar
Avatar billede arne_v Ekspert
10. oktober 2003 - 20:31 #10
#include <iostream>

using namespace std;

class C
{
  private:
      int v;
  public:
      C(int v) { this->v = v; };
      int GetV() { return v; };
      void SetV(int v) { this->v = v; };
};


void test1(C* o)
{
  cout << o << endl;
  o->SetV(1234);
  return;
}

void test2(C& o)
{
  cout << &o << endl;
  o.SetV(12345);
  return;
}

void test3(C o)
{
  cout << &o << endl;
  o.SetV(123456);
  return;
}

int main()
{
  C *o = new C(123);
  cout << o << endl;
  cout << o->GetV() << endl;
  test1(o);
  cout << o->GetV() << endl;
  test2(*o);
  cout << o->GetV() << endl;
  test3(*o);
  cout << o->GetV() << endl;
  return 0;
}

giver:

0x3f2c48
123
0x3f2c48
1234
0x3f2c48
12345
0x22ff50
12345

og det ses tydeligt at #3 er noget speciel !
Avatar billede conrad Nybegynder
10. oktober 2003 - 23:04 #11
jeg takker arne
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