next up previous contents
Next: 11.6 メソッドの追加定義 Up: 11.5 メソッド/秘伝の可変引数サポート Previous: 11.5 メソッド/秘伝の可変引数サポート

11.5.1 強制クラス外参照

例えば、下記のような書きかけプログラムがあるとします。


func max(a,b) (a>b)?a:b ;

func min(a,b) (a<b)?a:b ;

class ValueInfo {
public max ;
public min ;
method SetMinMax ;
}

method ValueInfo::SetMinMax (a,b) {
// a, b の小さいほうを、
// メンバ min に、大きいほうを、
// メンバ max にセットしたい
}

このメソッドSetMinMaxの中身を書く場合、すでに定義されている関数、min、 maxを利用して、


method ValueInfo::SetMinMax (a, b) {

->max = max(a,b) ;
->min = min(a,b) ;
}

としたいところですが、メソッド内では、メンバの参照の方が優先 されるので、

max(a,b), min(a,b)

は、それぞれ、ValueInfo の public メンバ min, max を参照してし まいます。そのため、メソッド内からせっかく外部に定義してある、 関数 min, max を利用できません。メソッド内から、メンバと同名の 外部変数・関数を参照したい場合は、その名前の先頭に、`$' をつけ ることによって行えます。


method ValueInfo::SetMinMax (a, b) {

->max = $max(a,b) ;
->min = $min(a,b) ;
}

$<識別子>の接頭文字`$'は、強制クラス外参照接頭文字といい、 クラス内のメンバ変数、メソッド/秘伝の参照を強制的に無視する働きをしま す。


next up previous contents
Next: 11.6 メソッドの追加定義 Up: 11.5 メソッド/秘伝の可変引数サポート Previous: 11.5 メソッド/秘伝の可変引数サポート
Tetsuo Ono
1998-11-05