2011-08-07 4 views
-2

「アクセサメソッド」と「コンストラクタ」の違いは何ですか?「アクセサメソッド」と「コンストラクタ」の違いは何ですか?

+3

リンゴとオレンジの違いは何ですか?あなたはおそらく、これらのもののそれぞれが何であるかを尋ねているはずです。なぜなら、それらが同等か類似していると思うなら、あなたはそれらの少なくとも1つが何であるか誤解するからです。 –

答えて

4

コンストラクタは、新しいオブジェクトを初期化します。アクセサは、外部呼び出し元がオブジェクトの状態に関する情報を取得できるようにします。

2

コンストラクタは、オブジェクトの初期化を行う関数です。これは、クラスの新しいインスタンスが(静的または動的にnewを使用して)作成されたときに呼び出され、オブジェクトの内部属性を明示的に初期化したり、任意のコードを実行することを可能にします。デストラクタによって補完されます。デストラクタは、オブジェクトが解放されると(解放の直前に)自動的に呼び出されます。例は、配列へのポインタを持つクラスです。コンストラクタで配列を割り当て、デストラクタでコンストラクタに割り当てられたメモリを解放します。

アクセサーメソッド(またはゲッター)は、オブジェクトの内部属性にアクセスできるメソッドです。これは、オブジェクトの特定の属性をカプセル化するためにセッターと並行して使用されます。アクセサーは不変でなければなりません(つまり、オブジェクトの内部状態に影響を与えるべきではありません)。

デストラクターの抜粋では、コンストラクターを含め、クラスのすべてのメソッドをオーバーロードすることができます。同じクラスのオブジェクトのconst参照をとるコンストラクタは、コピーコンストラクタと呼ばれます。デフォルトコンストラクタとして、これはコンパイラによって自動的に生成され、デフォルトではすべての属性がフィールドごとにコピーされます。この動作が常に必要なわけではないので、コピーコンストラクタを実装して、別のオブジェクトを正しくコピーできるようにすることができます(またはコピーを停止することができます - boost :: noncopyableを参照)。

例:

// C++ 
class Foo { 
    int i; 

public: 
    // Copy constructor 
    Foo(const Foo& foo) { 
     this->i = foo.i; 
     // Here you can do other stuff, beside raw copying... 
    } 
}; 

class Bar { 
public: 
    // Constructor 
    Bar() { 
     m_foo = new Foo(); 
    } 

    // Destructor 
    ~Bar() { 
     delete m_foo; 
     m_foo = 0; 
    } 

    // Getter (hides the actual attribute) 
    const Foo* getFoo() const { return m_foo; } 

    // Setter 
    void setFoo(Foo* foo) { 
     // Create a copy of Foo 
     m_foo = new Foo(*foo); 
    } 

private: 
    Foo* m_foo; 
}; 
+0

FWIWでは、getterとsetterの両方がアクセサです。セッターはもちろん、クラスを変更可能にします。ゲッターは、クラスの内部状態を変更するべきではありません。 –

0

コンストラクタは、オブジェクトをインスタンス化するために、新しいキーワードを使用したときに実行されるコードのブロックです。 http://beginnersbook.com/2013/03/constructors-in-java/

プライベートフィールドの値を返すためにアクセサメソッドが使用されます。メソッド名の先頭に "get"という接頭辞を付けた命名規則に従います。 http://java.about.com/od/workingwithobjects/a/accessormutator.htm

関連する問題