OOP Überlagern von Operatoren
hotti
- perl
hi,
gleich zur Sache. Ich hab zwei Objekte mit jeweils (bisher) einer Eigenschaft:
$tag1->{JD} = 1400;
$tag2->{JD} = 1399;
Nun will ich rechnen $tag1 - $tag2 und rauskommen soll dabei $tag3->{JD} = 1;
Mist, lang ists her, wie war das doch gleich nochmal?
Bitte mal um Hinweise,
Horst Daylight
Hallo,
Überlagern von Operatoren...hmmm...kann ich jetzt wirklich nicht mit dem Problem in Beziehung bringen, aber vielleicht steh ich auf dem Schlauch.
Ich würds jedenfalls so machen:
sub tagSubtract {
my ($tag1, $tag2) = @_;
my $result = new Tag(...(wie auch immer hierfür der Konstruktor
aussieht);
# Ausgehend, dass Du für das property JD einen Setter namens "setJD"
# geschrieben hast...
$result->setJD($tag1->{JD} - $tag2->{JD});
return($result);
}
(evtl. Syntaxfehler bitte ich zu entschuldigen, meine PERL-Tage sind schon seit längerem vorbei).
Evtl. könnte man "tagSubtract" auch direkt als Methode an dem Tag-Objekt implementieren....hängt aber von der konkreten Implementierung ab, ob das sinnvoll ist.
Viele Grüße,
Jörg
Hallo,
Überlagern von Operatoren...hmmm...kann ich jetzt wirklich nicht mit dem Problem in Beziehung bringen, aber vielleicht steh ich auf dem Schlauch.
I'm sorry...ich stand wirklich auf dem Schlauch. Du willst den "-"-Operator überladen, und dabei hilft Dir meine tolle Lösung kein bisschen weiter. Sorry.
Hallo,
Überlagern von Operatoren...hmmm...kann ich jetzt wirklich nicht mit dem Problem in Beziehung bringen, aber vielleicht steh ich auf dem Schlauch.
I'm sorry...ich stand wirklich auf dem Schlauch. Du willst den "-"-Operator überladen, und dabei hilft Dir meine tolle Lösung kein bisschen weiter. Sorry.
Macht nix, danke trotzdem für Deine Mühe!
Fakt ist, ich hab das mal in c++ gemacht, kann 15 Jahre her sein ;-)
Schönes Wochenende (Offline),
Hotti
PS: Hat eh Zeit, hab noch anderen Kram hier rumliegen, das kann ich dann unterwegs erledigen. Montag gehts weiter...
Auf die Schnelle:
package XD;
use overload '+' => \&myadd;
sub new{
my $self = shift;
my $int = shift;
return bless { JD => $int}, $self;
}
sub myadd{
my($x,$y) = @_;
return($x->{JD} + $y->{JD});
}
package main;
$x = XD->new(11);
$y = XD->new(22);
$z = $x + $y;
print $z; # 33
Jetzt aber Koffer packen....
Hotti Hottentott