国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Perl > 正文

perl面向對象實例

2020-02-23 19:44:40
字體:
來源:轉載
供稿:網友

C++的學習讓人感覺到自己很有成就感,也可以實現編程的絕對主力,嚴謹、高效、細致。雖然它的語法很復雜,但有規律可循,那么下面就讓武林技術頻道小編帶大家了解perl面向對象實例吧!

首先讓我們來看看有關 Perl 面向對象編程的三個基本定義:

1.? 一個“對象”是指一個“有辦法知道它是屬于哪個類”的簡單引用。(對象就是引用變量)
2.? 一個“類”是指一個“有辦法給屬于它的對象提供一些方法”的簡單的包。(類就是包)
3.? 一個“方法”是指一個“接受一個對象或者類名稱作為第一個參數”的簡單的子程序。(類的方法就是第一個參數為類名或對象的方法)

一個類只是一個簡單的包

和 C++ 不同,Perl 并不為類定義提供任何特殊語法。實際上類只是一個包而已。你可以把一個包當作一個類用,并且把包里的函數當作類的方法來用。不過,有一個特殊的數組,叫做 @ISA,它說明了“當 Perl 在當前包中找不到想要的方法時,應當繼續從哪兒去找”。這就是 Perl 實現“繼承”的關鍵。@ISA中的每個元素都是一個別的包的名字。當類找不到方法時,它會從 @ISA 數組中依次尋找(深度優先)。類通過訪問 @ISA 來知道哪些類是它的基類。

所有的類都有一個隱含的基類(祖先類):"UNIVERSAL"。"UNIVERSAL" 類為它的子類提供幾個通用的類方法。它提供以下幾個方法:isa,can。其中isa用來判斷變量是否從某個類繼承而來,can后面的參數則是一個方法,判斷這個方法是否在這個類或者基類中被定義。另外你可以給UNIVERSAL添加新的方法。一旦給它添加了新的方法,所有的class都可以調用。

給UNIBERSAL添加新方法的例子:

?

?

sub UNIVERSAL::log()
{
my($self,$msg)=@_;
print "$self: $msg/n";
}

?

這樣就可以在每個類中調用這個函數,并且log之前會把類名打印出來。

對象僅僅只是引用

Perl中的構造器只是一個子程序,該子程序返回一個被bless處理的引用,這個經過 bless 處理的引用就是人們所說的“對象”,而 bless 的作用就是用來說明這個對象是隸屬于哪個“類”。

最簡單的構造器:

?

?

package Critter;
sub new { bless {} }

?

如果你希望用戶不僅能夠用 "CLASS->new()" 這種形式來調用你的構造函數,還能夠以 "$obj->new()" 這樣的形式來調用的話,那么就這么做:

?

?

sub new {
my $this = shift;
my $class = ref($this) || $this;
my $self = {};
bless $self, $class;
$self->initialize();
return $self;
}

?

一個方法就是一個簡單的子程序

方法把它被調用時的對象或者類名稱當作它的第一個參數。有兩種不同的調用方法的途徑,分別成為“調用類方法”和“調用實例方法”。類方法把類名當作第一個參數。它提供針對類的功能,而不是針對某個具體的對象的功能。構造器通常是一個類方法。大多數類方法簡單地忽略第一個參數,因為方法知道自己處在什么類里面,也不關心它是通過什么類來調用的。
Perl 提供了兩種不同的形式去調用一個方法。最簡單的形式是采用箭頭符號:

?

?

??????? my $fred = Critter->find("Fred");
??????? $fred->display("Height", "Weight");

?

你可以早就熟悉了引用的 "->" 操作符。事實上,因為上面的 $fred是一個指向了對象的引用,因此你也可以把箭頭操作符理解為另外一種形式的解引用。

出現在箭頭左邊的引用或者類名,將作為第一個參數傳遞給箭頭右邊的方法。所以上面的代碼就分別相當于這樣:

?

?

??????? my $fred = Critter::find("Critter", "Fred");
??????? Critter::display($fred, "Height", "Weight");

?

簡單示例

1、說明

本程序演示了在Perl中如何進行面向對象編程:演示程序包含兩個文件:person.pl 和 person.pm,把 person.pl 和 person.pm 放在當前目錄下,運行"perl person.pl"即可以看到結果。person.pm定義了名為person的類。person.pl中創建了person類的實例,并測試了person的成員方法。

2、person.pm的內容

?

?

#!/usr/bin/perl -w
package person;
use strict;

?

sub new {
my $class = shift();
print("CLASS = $class/n");
my $self = {};
$self->{"name"} = shift();
$self->{"sex"} = shift();
bless $self, $class;
return $self;
}

sub getName {
my ($self) = @_;
return $self->{"name"};
}

sub setName {
my ($self, $name) = @_;
$self->{"name"} = $name;
}

sub getSex {
my ($self) = @_;
return $self->{"sex"};
}

sub setSex {
my ($self, $sex) = @_;
$self->{"sex"} = $sex;
}

?

3、person.pl的內容

?

?

#!/usr/bin/perl -w
use strict;
use person;

?

sub main()
{
my $tom = person->new("Tom", "male");
my $kiss = person->new("Kiss", "female");
my @persons = ($tom, $kiss);
for my $p (@persons) {
printf("NAME: %s/tSEX: %s/n", $p->getName(), $p->getSex());
}
}

&main();

?

4、程序運行結果

?

?

CLASS = person
CLASS = person
NAME: Tom SEX: male
NAME: Kiss SEX: female

相信大家通過武林技術頻道的介紹已經了解了perl面向對象實例,希望能夠幫到大家,我們也要嚴格按照上述方法進行操作。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 开阳县| 东兰县| 新乐市| 福贡县| 河池市| 桦南县| 萨迦县| 曲松县| 梅河口市| 乌拉特中旗| 西乌珠穆沁旗| 石柱| 勐海县| 台北县| 金华市| 深泽县| 连山| 罗山县| 德州市| 安吉县| 册亨县| 铜山县| 平遥县| 眉山市| 秦皇岛市| 关岭| 漯河市| 西安市| 仲巴县| 鄂尔多斯市| 通渭县| 鄂托克旗| 永善县| 高清| 大新县| 崇礼县| 阳东县| 石屏县| 加查县| 阿克| 稻城县|