Schrift
[thread]8517[/thread]

Virtuelle Methoden in Perl?



<< >> 6 Einträge, 1 Seite
Gast Gast
 2006-11-20 16:44
#71874 #71874
Hallo zusammen

Gibt es virtuelle Methoden in Perl?

Ich habe eine Klasse A mit Methode logText (A.logText). Nun vererbe ich aus der Klasse A die Klasse B (@ISA von Klasse B enthält Klasse A).

Ich will nun in Klasse B die Methode A.logText überschreiben so, dass auch die restlichen A-Methoden diese überschriebene Methode nutzen.

Aktuell habe ich zwar eine B.logText, aber alle Methoden der Klasse A greifen immernoch auf A.logText zu.. :(

Grüsse
Joel
frodus
 2006-11-20 17:02
#71875 #71875
User since
2003-09-26
147 Artikel
BenutzerIn
[default_avatar]
Versuch es mal so:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#!/usr/bin/perl

{
package a;

sub new {
my $invocation = shift();
my $class = ref($invocation) || $invocation;
my $self = {};
my $bless = bless($self, $class);
return $bless;
}

sub a1 {
my $self = shift();
print "hi I'm a\n!";
}

sub a2 {
my $self = shift();
$self->a1();
}
}
{
package b;

@ISA = qw(a);

sub a1 {
my $self = shift();
print "hi I'm b\n";
}

1;
}

my $a = new a();
my $b = new b();

$b->a2();
$a->a2();


Gruss,

Frodus
Taulmarill
 2006-11-20 17:07
#71876 #71876
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
was mir noch eingefallen ist, B sollte man nie als Klasse benutzen, auch nicht zum testen, da B ein coremodul ist.
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
sid burn
 2006-11-20 18:16
#71877 #71877
User since
2006-03-29
1520 Artikel
BenutzerIn

user image
[quote=Taulmarill,20.Nov..2006, 16:07]was mir noch eingefallen ist, B sollte man nie als Klasse benutzen, auch nicht zum testen, da B ein coremodul ist.[/quote]
Perl unterscheidet zwischen Groß/kleinschreibung. :-P
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de
Taulmarill
 2006-11-20 18:34
#71878 #71878
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
[quote=sid burn,20.11.2006, 17:16][quote=Taulmarill,20.Nov..2006, 16:07]was mir noch eingefallen ist, B sollte man nie als Klasse benutzen, auch nicht zum testen, da B ein coremodul ist.[/quote]
Perl unterscheidet zwischen Groß/kleinschreibung. :-P[/quote]
ich meinte auch den OP
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
Tr0Nix
 2006-11-21 11:45
#71879 #71879
User since
2006-11-21
44 Artikel
BenutzerIn
[default_avatar]
Okay ich habs hingekriegt! Die Lösung war, dass ich nicht mit $self die Methoden aufgerufen habe.

Also bei jeder Methode zuerst ein
my($self)=shift;
Hinzugefügt und anschliessend alle Methoden über den selfpointer aufgerufen unds hat geklappt.

Danke für Feedback!
<< >> 6 Einträge, 1 Seite



View all threads created 2006-11-20 16:44.