クラスメンバーへのアクセス
C言語 / C++ 2016/07/19
以下の例は構造体、クラスで共通だが、メンバ関数に関してはC++のみ。
// メンバ変数
obj.field1
// メンバ関数
obj.method1(arg1, arg2)
// ポインタからメンバ変数へのアクセス
ptr->field1
// ポインタからメンバ関数へのアクセス
ptr->method1(arg1, arg2)
// 静的メンバ変数
FooClass::field1
// 静的メンバ関数
FooClass::method1(arg1, arg2)
構造体やクラスの変数名からはドット(.
)で、ポインタからは ->
で、クラス名から静的メンバには二重コロン(::
)でアクセスする。
メンバ関数呼び出しは引数がなくても括弧が必要。
Java 2017/01/18
// インスタンスフィールド
obj.field1;
// クラスフィールド (staticフィールド)
FooClass.staticField1;
// インスタンスメソッド
obj.method1(arg1, arg2);
// クラスメソッド (staticメソッド)
FooClass.method2(arg1, arg2);
メソッド呼び出しは引数がなくても括弧が必要。
JavaからScalaのコンパニオンオブジェクトのフィールドにアクセスするには
FooClass$.MODULE$.field1
のようにする。コンパニオンオブジェクトのクラス名は後ろに $
が付き、インスタンスは MODULE$
というstaticなフィールドに保存されている。
Scala 2016/07/19
// フィールド
obj.field1;
// コンパニオンオブジェクトのフィールド
FooClass.field1;
// メソッド
obj.method1(arg1, arg2);
// 引数がないメソッド呼び出し
obj.method2;
// コンパニオンオブジェクトのメソッド
FooClass.method1(arg1, arg2);
メソッド呼び出しは引数がなければ括弧は不要。
PHP 2016/07/19
// プロパティ
$obj->field1;
// クラスプロパティ
FooClass::$staticField1;
// クラスで定義されている定数
FooClass::BAR
// メソッド
$obj->method1($arg1, $arg2);
// クラスメソッド
FooClass::method1($arg1, $arg2);
メソッド呼び出しは引数がなくても括弧が必要。プロパティとメソッドのアクセスは括弧の有無で区別されるので名前空間が異なり、同じ名前のプロパティとメソッドが共存できる。
Ruby 2013/12/14
Rubyでは外部からフィールドに直接アクセスすることはできず、アクセッサメソッドを利用する。
# アクセッサメソッドの定義の例
class FooClass
# フィールドへの読み取り専用アクセッサ
attr_reader :field1, :field2
# フィールドへの読み書きアクセッサ
attr_accessor :field3, :field4
end
# アクセッサメソッドでの読み取り
obj.field1
# アクセッサメソッドでの書き換え
obj.field1 = new_value
attr_reader
では、単にフィールドの値を返すだけのメソッドがフィールドと同じ名前のメソッドが作られる。上記では field1
, field2
という名前のメソッドが作られる。
attr_accessor
では、読み取り用のメソッドと書き込み用のメソッドがそれぞれ作られる。上記では field3
, field3=
, field4
, field4=
という名前のメソッドが作られる。
これらは FooClass.instance_methods
を呼び出すことで確認できる。
Perl 2015/03/18
# インスタンスメソッド
$obj->method1($arg1, $arg2);
# クラスメソッド
FooClass->method1($arg1, $arg2);