关于 伟大的 类

关于 伟大的 类

package MyPerson;
use strict;
#use warnings;
use vars qw(@ISA);
sub new {
    my ($class, @args) = @_;
    my ($first,$last,$id,$father,$mother) = @args;
    my $self = bless {
        'fname' => $first,
        'lname' => $last,
        'id' => $id,
        'mother' => $mother,
        'father' => $father,
    }, $class;
    return $self;
}
sub father {
    my ($self,$val) = @_;
    return $self->{'father'};
}
sub id { return shift->{'id'} }

1;



#!/usr/bin/perl -w
use strict;
use MyPerson;
my $person = MyPerson->new('jimbo', 'gumbo', 1,2,3);
my @family = (undef,$person); # 0 index needs to be empty
#print "@family\n";
push @family, MyPerson->new('mom', 'gumbo', 3, 0, 0);
print "@family\n","\n";
push @family, MyPerson->new('dad', 'gumbo', 2, 0, 0);
#print "@family\n";
my $dad = $family[$person->father];
print "$dad\n","\n" ;
print "$person\n";
print "father id is ", $person->father, "\n";
print "father obj id is $dad id is ", $dad->id,"\n"


结果:
MyPerson=HASH(0x289f6c) MyPerson=HASH(0x1829fc4)

MyPerson=HASH(0x1829fc4)

MyPerson=HASH(0x289f6c)
father id is 2
father obj id is MyPerson=HASH(0x1829fc4) id is 3




本来想通过程序来体会一下类的工作原理的。没想到 不体会 不知道,一体会 更不知道了。
不明白 怎么出现这么对内存地址。类这部分感觉超级晕!还请不吝赐教。

是不是要学好类 ,引用,模块是重点。

还是按照大骆驼的章节顺序来学吧。
别想一口气吃个大胖子。
你现在欠缺的不光是引用和模块,
连一些最基本的语法都没搞熟。
其实你知道你push进@family 的不是object,而是obj的ref就好了。
你可以从顶端建造金字塔么
my ($class, @args) = @_;
这个程序的代码 基本上是读懂了。但是发现my ($class, @args) = @_;语言中@_送来的数据都给了@args 没有给$class.这是为什么??????
Impossible
不信你自己打印一下$class好了