|
네 맞습니다.
프로젝트에 포함되는 .cpp파일 중 한군데서만 int x; 를 선언하고 나머지 .cpp 파일에서는 모두 extern을
붙여야 전역변수를 쓰실 수 있습니다.
만약 d.cpp라는 곳에서 extern 없이 그냥 int x; 를 선언했다면 다른 어드레스를 갖는 별개의 변수가
되는 것입니다.
그리고 클래스 내부의 public: 안에 멤버로 선언하는 것은,
public 즉 선언된 클래스가 아닌 다른 클래스등에서 사용할 수 있는 공개된 곳에 선언을 하시라는
의미였고요 사용할 때 포인터 연산자(->)를 이용하여 사용할 수 있으므로 이 클래스를 인지하는 어떤
.cpp에서든 항상 사용할 수 있으니까 그렇게 하는 방법이 있다는 것이었습니다.
(이미 이 방법을 쓰시고 계셨군요^^)
클래스 외부에 선언을 하는 경우에는 다른 .cpp에서 헤더를 include 하더라도 extern이 빠져 있으면
다른 메모리 어드레스를 가질 수 밖에 없기 때문에 전역변수가 될 수 었겠죠.
(설명을 하다보면 꼭 딴 방향으로 흐르는 것 같아은 기분이...^^;;)
워낙 말재주, 글재주가 없어서 이만....
Handheld 님이 쓰신 글 :
: 우선 정신없는 질문에 정확한 답변 감사드립니다. ^0^
: 첫번째 방법 클래스를 사용하는것은 그렇게 해왔는데
: public이 대책없이 늘어만 가는것 같아서 확신이 없었는데 써도 되는거군요.
: 근데 헤더파일의 클래스멤버에 public안에 선언하는거랑
: cpp파일의 인클루드 부분에 선언하는 것이 무슨차인가요?
:
: 그리고 말씀해주신것중에 두번째가 제일 궁굼했던 부분인데
: 방금 해봤습니다. ^^
: a.cpp에 int x; 선언을 하고 b.cpp에서 extern int x선언후 x=10이라고 배정을 한다면
: c.cpp의 인클루드 부분에 extern int x;라고 선언 후 사용하면 되는거 맞죠?
:
: posix.duo님의 글을 제대로 이해한게 맞나요? ^^
:
:
: posix.duo 님이 쓰신 글 :
: : 전역변수...라는 정의를 설명하는 것은 아니고 전역변수 혹은 전역변수 처럼 사용하는 방법을 설명합니다.
: :
: : 예를들어 a와 b라는 폼을 갖는 파일이 있을 때
: : a.cpp에서 사용한 변수 x를 b.cpp에서도 사용하고 싶다면
: : 쉽게 생각해서 두가지 방법을 떠올릴 수가 있습니다.
: :
: : 첫번째는 클래스 멤버를 활용하는 방법인데, a라는 폼의 클래스에 있는 public: 아래에 x라는 변수를
: : 선언하여 b.cpp에 a.h를 인클루드 시키고 a->x 와 같은 방법으로 사용할 수 있고요.
: :
: : 두번째는 실제로 전역변수를 사용하는 것인데 a.cpp에 int x; 라고 선언을 했다면 b.cpp에는
: : extern int x; 라고 선언을 하는 겁니다. 그러고 나서 b.cpp 내에서 사용 할 때에는 그냥
: : x = 10; 이런식으로 사용하시면 됩니다.
: :
: : 이만...
|