Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Operatoren!!!

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 < [ 2 ]
000
22.06.2003, 14:11 Uhr
~Anfänger00
Gast


Hallo,
wie kann man dynamische Objekte (also z.B. Cname* objekt[constante])
mit Operatoren verküpfen?

geht nicht: Objekt[variable] * Objekt[variable];
oder: Objekt[variable] -> * Objekt[variable];

DANKE
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
22.06.2003, 15:00 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


was meinst du mit operatoren? +,-,+,/ usw.?

ich glaub du wirfst da ne ganze menge durcheinander. Deshalb ist dein frage (zumindest für mich) ein bisschen schwer zu interpretieren.

also wenn du ein operator, nehmen wir mal die multiplikation auf variablen anwenden willst muss dieser operator auch für den typ dieser varbiablen definiert sein.

wenn du z.b. zwei int zahlen miteinander multiplizierst geht das ohne weiteres.

Wenn du eine eigene Klasse geschrieben hast musst du erst definieren was der jeweilige operator für eine funktion mit objekten deiner klasse anstellen soll.
nehmen wir mal an du hättest dir die klasse pkw erstellt.
nun erstellst du zwei objekte der klasse meinpkw1 und meinpkw2.
jetzt ist die frage was meinpkw1* meinpkw2 ergeben soll. Das ist nicht definiert und wenn du dies verwenden willst musst du dies erst selber tun.

auf primitiven datentypen kannst du im allgemeinen fast alle operatoren anwenden.

um noch mal auf dieses zeichen :* zu kommen;

so definierst du dir lediglich einen zeiger das hat mit einer multiplikation nichts zu tun

C++:
int *myintpoiter;



wenn du den inhalt auf den der zeiger zeigt multiplizieren willst musst du
diesen erst dereferenzieren. in test würde nun der wert auf den myintpointer zeigt stehen

C++:
int test = (*myintpointer);



mit diesem operator -> kürzt man im allgemeinen das dereferenzieren und ansprechen eines members einer klasse ab.

C++:
typedef struct {int x; int y}punkt;
punkt mypunkt;
// ansprechen kannst du die members mit
mypunkt.x=3;
mypunkt.y=4;

//hättest du so definiert erhälst du nur einen pointer
//um dann auf die members einer eventuell angelegten klasse auf die
//der pointer zeigt zuzugreifen hättest du zwei möglichkeiten
punkt *mypunktpointer;

(*mypunktpointer).x //das ist umständlich
mypunktpointer->x //ist identisch aber einfacher



Gruss Heiko
--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 22.06.2003 um 15:01 Uhr von Heiko editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
22.06.2003, 15:09 Uhr
~Anfänger00
Gast


Was ich meine sind die operatoren die in Klassen genutzt werden.

Kleiner Auszug meines qellcodes:
header file:

C++:
Test operator*(Test);


Die funktionen:

C++:
Test Test::operator*(Test Objekt)
{
Test ergebnis(x,y);
ergebnis.setze_seiten(x,y);
return ergebnis;
};


main:

C++:
Objekt[punkt1] * Objekt[punkt2];

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
22.06.2003, 16:43 Uhr
virtual
Sexiest Bit alive
(Operator)


Wenn Du eine Klasse wor oben (Test) hast sind zB folgende Dinge denkbar :

C++:
Test a, b, c;
...
a = b + c;
a = b.operator + (c);
...
Test*x ,*y, *z;
...
*x = (*y) + (*z);
*x = y->operator + (*c);


--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
22.06.2003, 18:29 Uhr
~Anfänger00
Gast


oh,also ich wollte das "*" nicht als poiner benutzen,außerdem wollte ich die Objekte dynamisch verwalten und du deklarierst sie ja.
Besteht also bei dynamischen Objekte nicht die Möglichkeit operatoren zu benutzen?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
22.06.2003, 19:05 Uhr
~Anfänger00
Gast


Vielleicht poste ich zum besseren Verständnis den gesmten Qellcode:

.h

C++:
class Test
{
public:
Test( double, double);
~Test();
void setze_daten( double, double);
void setze_seiten( double, double);
void zeige_daten();
private:
double x,y;
double laenge;
Test operator*(Test(double,double));
};


Funktionen

C++:
#include <iostream.h>
#include "ctest.h"

Test::Test( double punkt1, double punkt2) //Konstruktor
{
setze_daten(punkt1,punkt2);
laenge = 0;
};

Test::~Test() // Destruktor
{
cout<<" Das Objekt wurde geloescht!\n";
};

void Test::setze_daten( double x2, double y2) // Setzt x/y Wert
{
x = x2;
y = y2;
};
void Test::setze_seiten( double koordA, double koordB) // Strecke wird berechnet
{
if(x==koordA)
{
if(koordB<y)
laenge = y - koordB;
else laenge = koordB - y;
}

if(y==koordB)
{
if(koordA<x)
laenge = x - koordA;
else laenge = koordA - x;
}
else
laenge = sqrt((y-koordB)*(y-koordB)+(x-koordA)*(x-koordA));
/* koordB = y2  koordA = x2; Formel = Wurzel(sqrt) von ((y1-y2)²+(x1-x2)²) */
};

void Test::zeige_daten() // zeigt Informationen des Objekts
{
cout << " x Koordinate: "<<x<<"\n y Koordinate: "<<y<<endl;
cout << " Laenge: "<<laenge<<endl;
};
Test Test::operator*(Test Objekt(double x2,double y2)) //soll die Strecken
{                                                      //der festgelegten    
Test ergebnis(x2,y2);                                 //Punkte berechnen
ergebnis.setze_seiten(x2,y2);
return ergebnis;
};


main

C++:
#include "ctest.h"
#include <iostream.h>
int main()
{
Test* Objekt[30];
int anzahl=0,a=0,punkt1,punkt2;
double x,y;
char exit[2],weiter[2];

do{                    // Punkte festlegen
a++;
cout << " Geben sie die Koordinaten von Punkt "<<a<<" ein: \n x: ";
cin >> x;
cout << " y: ";
cin >> y;
Objekt[anzahl]= new Test(x,y);
anzahl++;
cout << " Naechster Punkt?(j\\n): ";
cin  >> weiter;
}
while(strcmp(weiter,"j")==0 && anzahl<30);

cout<< " 2 Punkte verbinden: \n";    
cout<< " 1: ";                      
cin>>punkt1;
cout<< " 2: ";                  
cin>>punkt2;                       // Punkte werden "verbunden" d.h
Objekt[punkt1]-> *(Objekt[punkt2]);// die Länge wird berechnet
                                      
for(int i=0;i<30 && i<anzahl;i++) //löscht die Objekte
{
delete Objekt[i];
}

cout<< " Beenden(b): ";  // Wartet  [getchar() geht im dev-c++ compiler nicht]
cin>>exit;
if (exit=="b") return 0;
else return 0;
}

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
22.06.2003, 20:47 Uhr
ao

(Operator)


Das Produkt aus zwei Objekten bilden?

C++:
*(Objekt[punkt1]) * *(Objekt[punkt2])


So müßte das gehen.
ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
22.06.2003, 22:18 Uhr
AlfameisterT



was ich jetzt aus dem Code nicht verstehe,
du verwendest beim überladenen Operator * nur ein Objekt,
also nur die das welches übergeben wird, also kein x oder y.
Sinn???

Test Test::operator*(Test Objekt(double x2,double y2)){
Test ergebnis(x2,y2);
ergebnis.setze_seiten(x2,y2);
return ergebnis;
};

mfg
AlfameisterT
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
23.06.2003, 09:07 Uhr
ao

(Operator)


Was soll das denn überhaupt werden, gib dem Ganzen doch
mal einen besseren Namen als Test.

Und was soll dieser Operator eigentlich tun? Ich versteh das
alles nicht so ganz. Unter operator * erwarte ich normalerweise
irgendeine Art von Multiplikation, und zwar auf *this.
Aber in deinem Code sehe ich nichts davon. Stattdessen
erzeugst du eine temporäre Instanz namens ergebnis,
rufst auf ihr setze_seiten und gibst sie zurück.
*this ist überhaupt nicht beteiligt, und die Instanz
namens Objekt auch nicht.

Wenn das beabsichtigt ist, hast du die Operatorüberladung
falsch eingesetzt.

ao

Dieser Post wurde am 23.06.2003 um 09:09 Uhr von ao editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
23.06.2003, 18:24 Uhr
~Anfänger00
Gast


Das werd ich wohl falsch gemacht haben.
Und deshalb hab ich das ganze ein wenig umprogramiert:
ich die Operator Methode weggelassen und stattdessen zwei Methoden geschrieben,mit denen man auf den x und auf den y Wert des Objektz
zugreifen kann.
Geht das auch ohne,also das man irgendwie anders auf ein Element des Objekts zugreifen kann wenn es als private deklariert ist?

Und wann ist es überhaupt sinnvoll Operatoren zu verwenden?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ 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: