Article View: pl.comp.lang.perl
Article #52113[OO] Wielokrotne dziedziczenie z jawnym wywołaniem konstruktorów klas bazowych z parametrami
From: Jarosław Lubczyński
Date: Wed, 15 Dec 2010 08:33
Date: Wed, 15 Dec 2010 08:33
125 lines
3563 bytes
3563 bytes
(przepraszam jeżeli ten list pojawi się drugi raz z nienacka, miałem
drobne problemy z Grzmiącym Ptakiem)
Kolejny problem na jaki napotkałem w Perlu dotyczy wielokrotnego
dziedziczenia.
Na początek napiszę kawałek kodu w c++ pokazujący o co mię się rozchodzi:
class A
{
public:
A( int APar)
{
m_APar = APar;
};
private:
int m_APar;
};
class B
{
public:
B( int BPar)
{
m_BPar = BPar;
}
private:
int m_BPar;
};
class C : public A, public B
{
public:
C( int APar, int BPar) : A( APar), B( BPar)
{
};
};
Czyli: W klasie pochodnej wywołuję konstruktory obu klas bazowych
przekazując do nich stosowne parametry.
A teraz chciałbym coś podobnego napisać w Perlu (kod działający):
{
package A;
sub new()
{
my( $class, $APar) = @_;
my $self = { APAR => $APar};
print( "Constructor called: A($APar)\n");
bless( $self, $class);
}
}
{
package B;
sub new()
{
my( $class, $BPar) = @_;
my $self = { BPAR => $BPar};
print( "Constructor called: B($BPar)\n");
bless( $self, $class);
}
}
# na razie chyba nie najgorzej. Teraz klasa C. I *problem*:
{
package C;
use base qw( A B);
sub new
{
my( $class, $APar, $BPar) = @_;
# dla pierwszej klasy bazowej nadal nie ma problemu:
my $self = $class->SUPER::new( $APar);
# zgodnie z deklaracją use base będzie
# wywołany konstruktor klasy A.
# A CO Z WYWOŁANIEM KONSTRUKTORA KLASY B???
# można co prawda napisać tak (działa!):
my $self_b = $class->B::new( $BPar);
# ale jak potem zmerge'ować $self i $self_b ???
}
}
my $c = C->new( 1, 2);
#
# EOF
#
No właśnie, jak to zrobić? I jak potem odwoływać się do:
1. Pól klas bazowych przy założeniu, że mają różne nazwy jak w
przykładzie powyżej?
2. Pól/metod klas bazowych jeżeli mają w obu klasach identyczne nazwy,
np. m_Par a metody dostępowe odpowiednio getPar i setPar?
--
Pozdrawiam
Jarek Lubczyński
(eljot<NULL>90125 at gmail dot com)
Nawiasy trójkątne z zawartością zbędne są
There are 10 kinds of people:
Those who understand binary and those who don't
--
Pozdrawiam
Jarek Lubczyński
(eljot<NULL>90125 at gmail dot com)
Nawiasy trójkątne z zawartością zbędne są
There are 10 kinds of people:
Those who understand binary and those who don't
Technical Details
Message-ID:
<ie9uh2$qfj$1@opal.futuro.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!news.nask.pl!news.nask.org.pl!news.internetia.pl!opal.futuro.pl!not-for-mailShow Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!news.nask.pl!news.nask.org.pl!news.internetia.pl!opal.futuro.pl!not-for-mail From: Jarosław Lubczyński <guess@who.com.pl> Newsgroups: pl.comp.lang.perl Subject: [OO] Wielokrotne dziedziczenie z jawnym wywołaniem konstruktorów klas bazowych z parametrami Date: Wed, 15 Dec 2010 09:33:11 +0100 Organization: Pro Futuro Lines: 126 Message-ID: <ie9uh2$qfj$1@opal.futuro.pl> Reply-To: guess@who.com.pl NNTP-Posting-Host: ns.elkomtech.com.pl Mime-Version: 1.0 X-Trace: opal.futuro.pl 1292402019 27123 62.233.147.142 (15 Dec 2010 08:33:39 GMT) X-Complaints-To: usenet@futuro.pl NNTP-Posting-Date: Wed, 15 Dec 2010 08:33:39 +0000 (UTC) User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.9.2.13) Gecko/20101207 Thunderbird/3.1.7 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit