2009-04-13 7 views
4

私はインスタンス変数がintやdoubleのような単純なデータ型だと思います。オブジェクトが作成されたときに自動的に作成されるすべて。インスタンス変数の正確な定義は何ですか?

オブジェクトが追加オブジェクトを作成する場合(NEWキーワードで行われたすべてのオブジェクトのように)、これらはインスタンス変数ではありません。

私は間違っていますか? 正確な定義は何ですか?

+0

どのような定義をお探しですか?言語に依存しない、またはC++に特有のものですか?後者の場合、非静的データメンバーの定義があります。しかし、C++で私が知っている "インスタンス変数"の定義はありません。 –

答えて

18

間違っています。インスタンス内にバインドされたもの(インスタンス化されたオブジェクト)はすべてインスタンス変数です。クラスにバインドされている静的(クラス)変数の反対です。単純な型やオブジェクトへのポインタであれば問題ありません。

+1

+1、暫定的に。 *オブジェクトへのポインタ*はインスタンス変数であり、それらが指す*オブジェクト*はそうではありません。 – paxdiablo

+0

私はvartecが正しいと思います。それは言語にとらわれない答えです。オブジェクトへのポインタがC++の意味のメンバではないとしても、それはまだそれにバインドされています。 –

+0

@Pax:trueですが、ヒープ上にオブジェクトがある場合は、ポインタがアクセスする唯一の方法です。 – vartec

0

オブジェクトが作成する時期と場所によって異なります。それらがクラス・レベルで宣言されていても、インスタンス化の後で作成された場合、それらはインスタンス変数です。それらが関数内で宣言され作成された場合、それらはインスタンス変数ではなくローカル変数です。

1

インスタンス変数(別名フィールド)ローカルスタックフレームに属するクラスおよびローカル変数に属する静的変数とは対照的に、インスタンスに属している変数です。

定義では、タイプのインスタンスであるオブジェクトが定義されています。 Wikipediaから

5

(あなたが正確な定義を求め):クラスとオブジェクト指向プログラミングにおいて

、インスタンス変数は、クラス内の各オブジェクトは別々を持っているクラスで定義された変数でありますコピー。

インスタンス変数は、変数variableの と反対であり、インスタンスメンバーの特殊な タイプです。

6

インスタンス変数は、クラスのインスタンスに関連付けることができるものです。例えば、あなたは

class A 
{ 
private: 
int m_a; 
double m_b; 
int* m_c; 
}; 

があり、物体Aの(すなわち、インスタンス)、m_a、M_Bの1つのインスタンスを作成する場合、m_cが作成され、それに関連付けられている場合。したがって、これらはインスタンス変数になります。同時に、クラス内に静的変数がある場合、静的変数インスタンスはクラスの各オブジェクトに関連付けられていないため、インスタンス変数ではありません。 NEWまたはスタックオブジェクトの作成は、オブジェクトを作成する方法であり、インスタンス変数とは何の関係もありません。

1
class A { 
    int a; 
    Foo *f; 
    static int b; 
}; 

aはインスタンス変数です。 bはありません。ポインターfはインスタンス変数そのもので、fnewで作成)が指すオブジェクトは、それがまだインスタンス状態の一部であっても変数でさえないのでインスタンス変数ではありません。

+0

+1はポインタとオブジェクトを区別するためのものですが、オブジェクトは依然として変数です。 A :: add(Foo *)[つまり、Aのスコープの外に作成された]で設定されたリンクリストの最初のノードへのポインタを想像することができます - *すべて*そのリスト内のノードは変数ですがインスタンスクラスのものでもありません。 – paxdiablo

+0

しかし、これらは同じオブジェクトを指し示す/参照する他の*変数です。オブジェクトはメモリ内のバイトだけです。変数がAのスコープ外の同じオブジェクトを指しているかもしれませんが、*これらは変数でありオブジェクトではありません。 –

+0

標準では、「変数はオブジェクトの宣言によって導入され、変数の名前はオブジェクトを表します」と述べています。新しいオブジェクトがあれば、そのオブジェクトは宣言されませんでした。私はチェッカーが正しいと思う。オブジェクトは単なるメモリの範囲です(しかし、常にC++に関連した型を持ち、Cとは逆です) –

2

私はOOPの概念を初めて使いましたが、私は最善を尽くします。

はい、インスタンス変数は通常のデータ型を持つ変数ですが、OBJECTの特定のインスタンスにはBELONGします。インスタンス変数は、オブジェクトの「特性」または「プロパティ」を記述する変数です。例えばcarColor、carNameは、オブジェクトcarの特性を記述しているので、クラス "Car"のインスタンス変数である可能性があります。

新しいオブジェクトがキーワード "new"でインスタンス化されると、すべてのインスタンス変数が自動的にオブジェクトにアタッチされ、別々に追跡することができます。例えば

するvar CARA =新車 carA.carName = "ホンダ" carA.carColor = "ブルー"

するvar CARB =新車 carA.carName = "オースティン" carA.carColor = "赤"

関連する問題