2014-09-07 4 views
-1

이 작은 코드 스 니펫이 있는데, 왜 이렇게 작동하는지 조금 혼란 스럽습니다. A :: put_x (3)을 호출하면 정적 함수이므로 a가 변경되지 않습니까? 감사!정적 함수에 대해 혼란 스럽습니다.

#include<iostream> 
using namespace std; 

class A 
{ 
private: 
    static int x; 
    int y; 
public: 
    A(int i) { x = i; y = -i; } 
    static int put_x(A a) { return x + a.y; } 
}; 

int A::x = 5; 
int main() 
{ 
    A a(7); 
    cout << A::put_x(3); 
    return 0; 
} 
+1

어떤 의미입니까? 그리고 당신이 의미하는 바가 무엇이든 변하지 않는다는 것을 어떻게 확인합니까? 게다가, "변하지 않는다"는 말은 무엇을 의미합니까? –

답변

2

올바른 결과를 나타냅니다. 정적 X 변경

추적 :

  1. 선 (14), : X, X == 5
  2. 라인 (17), 본체에서의 예를()의 X == 7
  3. 초기화
  4. 라인 (18), 정수를 캐스팅의 결과로 새로운 임시 예 : A (3), X를 == 3
  5. 당신이 put_x 전화

, 그것은 X의 합 (지금 그것의 3)과 y 값을 (계산 - 3). 예상대로 결과가 0입니다.

관련 문제