Perlについての質問箱 43箱目
■ このスレッドは過去ログ倉庫に格納されています
0678デフォルトの名無しさん
2010/06/30(水) 14:45:18親クラスも初期化し、子クラスも初期化して使う書き方がよく分からず混乱しています。
例えば以下のコードのように、親クラスも初期化する必要があるが、子クラスに追加フィールドを持ちたい場合、
どうやって両方を初期化して、全て子クラスのオブジェクトとして持ち歩けばよいか分かりません。
このコードの場合だと、親クラスのコンストラクタを呼んで、その参照を bless しただけで、子クラスの
追加フィールドを bless 出来ません…
bless は唯一つのハッシュリファレンをクラスと紐付けるものだと理解していますが、
この場合はどうすれば良いのでしょうか?アドバイスいただけますと幸いです。
#!/usr/bin/perl
package Parent;
sub new {
my ( $class, $arg ) = @_;
return bless { "parent" => $arg }, $class; #引数をparentにセット
}
sub print {
print "Parent: " . shift->{"parent"} . "\n"; #parentの内容をprint
}
package Child;
use base qw(Parent);
sub new {
my ( $class, $arg ) = @_;
my $super = $class->SUPER::new($arg); #親クラスコンストラクタ呼び出し
my $field = { 'child' => '20' }; #子クラスの追加フィールド
return bless $super, $class;
}
package main;
my $child = new Child(10); #子クラスのインスタンス作成
print $child->print(); #親クラスのfieldをprint
■ このスレッドは過去ログ倉庫に格納されています