3

OOP perl の新機能...最初のプログラムであり、コンストラクターをオーバーロードすることはできません。私は多くのことを試しましたが、まだいくつか不足している可能性があります!

基本クラス:

#!/usr/bin/perl
use strict;
package Person;
sub new
{
my($class)=shift;
my($self)={ 
        _name=>shift,
        _sname=>shift,
};
bless $self, $class;
return $self;
}       
1;  

派生クラス:

#!/usr/bin/perl
package Employee;
use strict;
use Person;
our @ISA = qw(Person);
sub new
{
my($class)=@_;
my($self)=$class->SUPER::new($_[1],$_[2]);
my $self1={
        _id=>$_[3],
        _sal=>$_[4],
};
bless $self1,$class;
return ($self);
}
1;

主なプログラム:

#!/usr/bin/perl
use strict;
use Data::Dumper;
use Employee;

sub main
{
my($obj)=Employee->new("abc","def","515","10");
print Dumper $obj;
}
main();

基本クラスのクラス メンバーの値を取得できません。プログラムで見逃したものを取得できません。手伝ってください。

4

1 に答える 1

7

$self1派生コンストラクターで呼び出されるオブジェクトは必要ありません。あなたはただ言うべきです:

sub new {
    my($class)=@_;
    my($self)=$class->SUPER::new($_[1],$_[2]);
    $self->{_id} = $_[3];
    $self->{_sal} = $_[4];
    # no need to bless -- $self is already blessed correctly in SUPER::new
    return ($self);
}
于 2012-04-16T17:17:36.820 に答える