2012-04-16 16 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); 
}