2014-07-24 2 views
2

내 프로그램은 두 개의 개체 (a1 및 a2)를 만들고 값이 42 인 a1과 값이 11 인 a2를 초기화합니다. 생성자는 변수 num 및 x를 정확하게이 값으로 설정합니다. C++ : 2 개 개체 초기화 -> 예상대로 출력되지 않음

하지만 내 프로그램 출력이 (예상하지으로 42 42)이다는 : 오브젝트 A1에서 NUM 가져 이유

#include <iostream> 
using namespace std; 

class A { 
     static int num; 
     int x; 
     public: 
     A(int n) { 
       num = n; 
       x = n; 
     } 

     void print() { 
       cout << num << endl; 
       cout << x << endl; 
       cout << endl; 
     } 
}; 

int A::num; 

int main() { 
     A a1(42); 
     A a2(11); 
     a1.print(); 
} 

사람이 나에게 힌트를 줄 수 :

여기
11 
42 

내 코드입니다 "덮어 쓴"때 개체 a2 만들 수 있습니까? 덕분에 많은 ...

+4

'static' 키워드의 의미는 무엇입니까? –

+0

그게'정적'이야. – chris

+2

사람들이 왜 질문을 왜곡합니까? 물론, 그것은 초보자 실수지만 질문은 완벽하게 괜찮습니까? –

답변

0

이것은 완벽합니다. num은 정적 변수입니다. 즉, 클래스의 모든 인스턴스에서 공유됩니다. a2의 생성자에 num을 할당하면 에 모두num을 할당합니다.

1

"num"은 정적 변수이므로 클래스 변수이므로 모든 인스턴스에 대해 하나의 값만 있습니다.

1

정적 클래스 멤버는 클래스의 모든 인스턴스간에 공유됩니다. 따라서 A a2(11)을 만들면 num이 11로 덮어 쓰기됩니다.

이것은 정상적인 정적 동작입니다.

+0

아, 감사합니다 ... didnt는 이것을 깨달았습니다. 전에 :) –

0

static 키워드가 있습니다. 정적 키워드는, A2 및 A 형의 다른 모든 객체가있을 것이라는 점을 A1을 의미하는 모든 객체 사이에 공유되는 동일한 num

은 다음과 같습니다 있도록 정적을 제거하는 경우 :

int num; 
int x; 

출력해야 함

42 
42 
관련 문제