2012-04-16 3 views
3

OOP perlの新機能...最初のプログラムで、オーバーロードコンストラクタではありません。私は多くのことを試しました、私はまだいくつかのものが欠けているかもしれません!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)[email protected]_; 
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(); 

私は、基本クラスのクラスメンバーの値を取得することはできませんよ。私がプログラムで見逃しているものを得ていない。私を助けてください。

答えて

7

派生コンストラクタには$self1というオブジェクトは必要ありません。あなたはちょうど言う必要があります:

sub new { 
    my($class)[email protected]_; 
    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); 
} 
関連する問題