Avatar billede kernelx Juniormester
11. december 2006 - 23:40 Der er 9 kommentarer og
1 løsning

overlaode index-operator

hi, jeg har en class

---
class test
{
  ...
  public:
    unsigned int& operator[](unsigned int op2);
  ...
};

unsigned int& test::operator[](unsigned int op2)
{
  cout << "array[" << op2 << "] = " << op1 << "\n";
}
---

test xyz;
xyz[5] = 8;  // xyz[op2] = op1

hvordan kan jeg i
---
unsigned int& test::operator[](unsigned int op2)
{
  cout << "array[" << op2 << "] = " << op1 << "\n";
}
---
få fat i op1?


med venlig hilsen
KernelX
Avatar billede bertelbrander Novice
11. december 2006 - 23:44 #1
Så vidt jeg lige kan se kan du ikke.
Der er to operatorer i gang, [] og =
De to kan ikke "se" hinanden. Men det burde virke alligevel.
Hvorfor vil du have op1 fra [] ?
Avatar billede kernelx Juniormester
12. december 2006 - 03:31 #2
class array
{
    int *classArray;
    ...
}

int& array::operator[](int op2)
{
    ...
    return (this->classArray[op2])
}
---
sådan har jeg løset problemet nu.
men hvis det skulle være muligt, så ville jeg gerne have en class-function, som løser opgaven:
---
class array
{
    int *classArray;
    ...
}

int& array::operator[](int op2)
{
    this->setValues(op2, op1);
    ...
    return (...)
}
---
Avatar billede kenneth_gorking Nybegynder
12. december 2006 - 17:26 #3
Hvorfor ikke bare bruge:
  test xyz;
  xyz.setValues(5, 8);
Det har også den side-gevinst at det ikke er forvirrende...

Forresten, grunden til at det ikke vil virke uden nogle tricks, er at [] operatoren returnere en reference til en integer som modtager værdien, og ikke din klasse. Sådan som compileren ser koden, set det (circa) sådan her ud:

  test xyz;
  int &ref = xyz[5];
  ref = 8;
Avatar billede kernelx Juniormester
12. december 2006 - 19:59 #4
svaret er alså, at det ikke er muligt :-)
husk at skrive svar - i stedet for kommentar
Avatar billede bertelbrander Novice
12. december 2006 - 20:07 #5
Jeg kan godt se at det er lettere og mindre forvirrende at skrive:
xyz[5] = 8;

I stedet for:
xyz.setValues(5, 8);

Men jeg forstår ikke hvorfor du skal bruge op1 fra [] operatoren.
Avatar billede kernelx Juniormester
12. december 2006 - 21:35 #6
int& array::operator[](int op2)
{
    cout << "array[" << op2 << "] = " << op1 << "\n";

    return (this->classArray[op2])
}
---
f.eks. vil jeg arbejde videre med værdierne - på en eller anden måde i selve class-funktionen.
men jeg kan først arbejde videre hvis med værdien op1 efter at jeg har brugt return. efter return er hele funktionen færdig, så jeg bliver nød til at kalle på to funktioner. en som setter værdierne - og en, som arbejder vider med værdierne.

hvorfor jeg bruger operator[] i stedet for setValues(index, value):
  jeg kan godt lide skrive-methoden array1[5] = 9 (det er mere eller mindre min personlig mening)

jeg kan godt lide at checke ting som jeg programerer med
cout << ...
det er let og hurtigt at bruge. i det viste eksempel kan jeg ikke bruge det, pga. at jeg ikke for fat i op1
---

selvfølgelig hat i ret i, at det også er muligt at bruge setValues(index, value) - og det vil jeg sikkert også komme til at bruge.
jeg synnes bare, det kunne være dejligt at arbejde med array1[index]

med venlig hilsen
KernelX
Avatar billede kernelx Juniormester
12. december 2006 - 21:36 #7
husk at skrive et eller andet som svar ... jeg skal jo af med points :-)
Avatar billede bertelbrander Novice
12. december 2006 - 22:34 #8
Jeg samler ikke på point.
Avatar billede kernelx Juniormester
13. december 2006 - 12:36 #9
kenneth_gorking - hvad med dig? vil du skrive et svar? jeg skal af med points :-)
Avatar billede kenneth_gorking Nybegynder
13. december 2006 - 15:53 #10
Joo.
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