2009-04-13 4 views
4

인스턴스 변수는 int 또는 double과 같은 간단한 데이터 유형이라고 생각합니다. 객체가 생성 될 때 자동으로 생성되는 모든 것.인스턴스 변수의 정확한 정의는 무엇입니까?

개체가 NEW 키워드로 수행되는 모든 작업과 마찬가지로 추가 개체를 만드는 경우에는 인스턴스 변수가 아닙니다.

내가 옳은가요? 정확한 정의는 무엇입니까?

+0

어떤 정의를 원하십니까? 언어 독립적 또는 C++ 특정? 후자의 경우 비 정적 데이터 멤버의 정의가 있습니다. 그러나 C++에서 내가 아는 "인스턴스 변수"에 대한 정의는 없습니다. 임시로 +1 –

답변

18

틀린. 인스턴스 내에서 바인딩 된 모든 것 (즉, 인스턴스화 된 객체)은 인스턴스 변수입니다. 클래스에 바인딩 된 정적 (클래스) 변수의 반대입니다. 단순한 유형 또는 객체에 대한 포인터인지는 중요하지 않습니다.

+1

. 객체에 대한 포인터 *는 인스턴스 변수이며, 포인터가 가리키는 * 객체는 아닙니다. – paxdiablo

+0

나는 vartec이 옳다고 생각합니다. 그것은 언어에 구속받지 않는 대답입니다. 객체를 가리키는 것이 C++의 멤버가 아닌 경우에도 여전히 바인딩되어 있습니다. –

+0

@Pax : true이지만 힙에 객체가있는 경우 포인터 만 액세스 할 수 있습니다. – vartec

0

개체가 생성하는시기와 위치에 따라 다릅니다. 클래스 수준에서 선언되지만 인스턴스화 후에 만 ​​작성된 경우에도 인스턴스 변수입니다. 함수 내에서 선언되고 작성된 경우에는 인스턴스 변수가 아니라 지역 변수입니다.

1

인스턴스 변수 (일명. 필드)가 로컬 스택 프레임에 속하는 클래스 국소 변수에 속하는 정적 변수 반대 인 인스턴스에 속하는 변수이다.

사용자 정의는 유형의 인스턴스 인 오브젝트을 정의합니다. Wikipedia에서

5

는 (당신은 정확한 정의를 요구) : 클래스와 객체 지향 프로그래밍에서

는, 인스턴스 변수는 클래스의 각 개체는 별도의를 갖고있는 클래스에 정의 된 변수입니다

부.

인스턴스 변수는 변수 변수 과 반대이며 인스턴스 멤버 인 유형입니다.

6

인스턴스 변수는 클래스 인스턴스와 연관 될 수있는 변수입니다. 예를 들어, 당신이

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

가 있고 객체 (A)의 (즉, 인스턴스) m_a, m_b의 인스턴스를 생성하는 경우, m_c 생성과 연관된 경우. 그래서 이들은 인스턴스 변수가됩니다. 동시에 클래스 내에 정적 변수가있는 경우 정적 변수 인스턴스는 클래스의 각 객체와 연결되지 않으므로 인스턴스 변수가 아닙니다. NEW 또는 스택 객체 생성은 객체를 만드는 방법 일 뿐이며 인스턴스 변수와 아무런 관련이 없습니다.

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

a은 인스턴스 변수입니다. b은 그렇지 않습니다. 포인터 f은 인스턴스 변수 자체이기 때문에 f (new으로 생성됨)이 가리키는 개체는 인스턴스 변수가 아니기 때문에 변수가 아니기 때문에 인스턴스 변수가 아닙니다. 이는 여전히 인스턴스 상태의 일부분이더라도 마찬가지입니다.

+0

+1 포인터와 개체를 구별하기 위해 +1하지만 개체는 여전히 변수입니다. 나는 A :: add (Foo *) [즉, A 범위 밖에서 생성]로 설정된 링크 된 목록의 첫 번째 노드에 대한 포인터를 상상할 수 있습니다. * 모든 * 해당 목록의 노드는 변수이지만 인스턴스가 아닙니다. 계급도 아니다. – paxdiablo

+0

그러나 이것들은 동일한 객체를 가리키고/참조하는 변수 일뿐입니다. 개체는 단지 메모리에있는 바이트입니다. A의 범위 밖에서 동일한 객체를 가리키는 변수가있을 수 있지만 *이 변수는 객체가 아니라 변수입니다. –

+0

표준은 "변수가 객체의 선언에 의해 소개되고 변수의 이름은 객체를 나타냅니다"라고 말합니다. 새로운 객체가 있다면 그 객체는 선언되지 않았습니다. 나는 체커가 옳다고 생각한다. 객체는 단지 메모리의 범위에 불과하지만 (C와는 반대로 항상 C++과 연관된 타입을 가짐) –

2

OOP 개념에 익숙하지 않지만 최선을 다할 것입니다.

예, 인스턴스 변수는 일반적인 데이터 유형의 변수이지만 BELONG은 특정 OBJECT 인스턴스에 속합니다. 인스턴스 변수는 객체의 "특성"또는 "속성"을 설명하는 변수입니다. 예 : carColor, carName은 객체 차의 특성을 설명하기 때문에 "Car"클래스의 인스턴스 변수가 될 수 있습니다.

새 개체가 키워드 "new"로 인스턴스화되면 모든 인스턴스 변수가 개체에 자동으로 연결되고 세 번째로 추적 할 수 있습니다. 예 :

var에 카라 = 새 차 carA.carName = "혼다" carA.carColor = "블루"

VAR 수화물 = 새 차 carA.carName = "오스틴" carA.carColor = "레드"

관련 문제