Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Hilfe operator[] ??????????

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
16.11.2003, 00:18 Uhr
~c-mos
Gast


Sorry hier noch mal formatiert... weiß net warums vorher so angezeigt wurde
Hallo,
habe gerade das hier bein nem tut gelesen
so ähnlich

C++:
class test
{
private:
  double *daten;
  int size;
public:
  test(int)
    double& operator[] (int);
};
double& test:operator[ ] (int index)
{
  return daten[index];
}
test::test(int size)
{
  daten=new double[size];
}
int main()
{
  test o_test(5);
  cout <<o_test[3];
}



1. Was genau ist hier operator, hab ich noch nie von gehört.
2. Wieso kann ich auf das erzeugte Objekt, also o_test, wie
auf ein array zugreifen ?

--edit: Pablo. Code eingerückt --

Dieser Post wurde am 16.11.2003 um 00:52 Uhr von Pablo Yanez Trujillo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
16.11.2003, 01:01 Uhr
Pablo
Supertux
(Operator)


1. Operatoren sind spezielle Funktionen, die Klassen zur Verfügung gestellt werden, um übliche Operationen durchzuführen. So ist es, dass du eine Klasse Matrix schreiben kannst und mit Zahl Multiplizieren oder mit anderen matrizen addieren.


C++:
Matrix a, b,c;
....
c=2*b;
c=c+a+b;



Du überlädst den + und * Operator. damit dowas möglich sein kann. In Wirklichkeit wird eine Funktion aufgerufen, so in der Art.


C++:
Matrix a, b,c;
....
c=b.operator*(2);
c=c.operator+(a.operator+(b));



2. Die Klasse hat eine Variable, die ein Array ist. Der Operator [] wird überladen, damit man schnell auf die Elemente des Arrays zugerifen kann, als ob das Objekt der Klasse selbst ein Array wäre.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
16.11.2003, 08:20 Uhr
(un)wissender
Niveauwart


Obiger Code produziert ein Speicherleck, "daten" muss vor der neuen Allokation gelöscht werden und nach der Destruierung von dem Objekt, d.h in dem Destuktor fehlt ein delete [] daten.
Ansonsten kennst du dich den Operator[], wenn nicht, dann schau dir mal Arrays an, da wird er auch verwendet.
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
16.11.2003, 08:33 Uhr
virtual
Sexiest Bit alive
(Operator)



Zitat:
Pablo Yanez Trujillo postete

C++:
Matrix a, b,c;
....
c=2*b;
...


...

C++:
Matrix a, b,c;
....
c=b.operator*(2);
....




Nur Fast:

C++:
c = 2*b;


Geht nur dann, wenn ein gloabler Operator der Form

C++:
Matrix operator * ( int, const Matrix&);


definiert wurde, so daß

C++:
c = 2*b;


Identisch wäre mit

C++:
c = operator + ( 2, b);


--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)

Dieser Post wurde am 16.11.2003 um 08:34 Uhr von virtual editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
16.11.2003, 13:04 Uhr
cmos



Hi,
danke für die Hilfe.
Also wenn ich das jetzt richtig verstanden habe
ist das um die Handhabung zu vereinfachen
da ich sonst über o_test.daten[ ] drauf zugreifen müßte (?)

Ciao..
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
16.11.2003, 13:05 Uhr
Pablo
Supertux
(Operator)


Ja, so ist es.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
17.11.2003, 08:41 Uhr
ao

(Operator)



Zitat:
cmos postete
Hi,
danke für die Hilfe.
Also wenn ich das jetzt richtig verstanden habe
ist das um die Handhabung zu vereinfachen
da ich sonst über o_test.daten[ ] drauf zugreifen müßte (?)
Ciao..

Genau. Und weil die Daten privat sind, würde das gar nicht gehen. Man könnte das natürlich auch mit Methoden erledigen:

C++:
int GetElement (int nIndex);


aber der Operator verbessert die Lesbarkeit des Codes, weil das Objekt optisch genauso behandelt wird wie ein gewöhnliches C-Array.

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: