c++ class static function 에 관한 내용
#include<iostream> using namespace std; class tri { private: int z; public: static int x; tri() { z = 30; } static int& e() static // (0) { // cout << z; 에러(1) return x; } static tri& k() { //cout << (*this).z; 에러 (4) cout << "e"; return (*this); //에러 (5) } }; int tri:: x = 10; int main() { static tri a; //(2) static int &q=a.e(); //(3) cout << a.x; q = 100; // q값 수정 cout << a.x; a.k(); return 0; }
첫째,
(0) 번에서 함수 뒤쪽의 static 은 무엇을 의미하게 되는것인지 모르게습니다. 답변부탁드립니다.<--- 질문!!!!!
보충설명
C:\Djgpp\Study\Cpp1.cpp(20) : warning C4518: 'static ' : storage-class or type specifier(s) unexpected here; ignored
이런 경고내용이 나오기는 합니다. 무슨내용인지 모르겠습니다.
(2)에서 a객체를 static 으로 선언하지 않아도 에러가 나지않습니다.
따라서 이런 구문은 의미없는 구문인거 같기도 하구요 또 그렇게 만드는것도 이상합니다. 이런식의 구문이 되는거 같은데요
static int a;
static int b=a;
이런 식으로 해도 에러는 안나지만... 안쓰는거 같던데요..
둘째,
(3)번에서 static 이 없어도 에러가 나지 않습니다. 여기서의 static 의 의미가 무엇인지 궁금합니다. 없어도 전혀 이상없이 작동됩니다.아무래도
군더더기 같은데요...
셋째,
static을 리턴하는 함수에서는 this 포인터를 사용하면 에러가 납니다.
(4)처럼 this를 참조하거나.. (5) 처럼 리턴을 해도 에러가 나구요..
그런데 static 을 리턴값으로 잡아도 호출하는객체의 this포인터와는
전혀 무관한것이 아닌가요? this 포인터를 쓰도록 해도 static 의 의미는
퇴색되지 않는거 같은데요..
왜 이렇게 만들어 놓은것인지 이유를 모르겠습니다.
Re: c++ class static function 에 관한 내용
1. 함수 뒤쪽의 static 은 그 warining 에서 말하는 그대로 불필요해서 무시됐으므로 아무 의미가 없는겁니다. (2) 에서 static 으로 선언하지 않아도 에러가 나지 않는 것은 당연합니다. 이것은 C 나 C++ 책에서 storage class (기억 부류 ) 부분을 공부하시면 됩니다.
2. 거기서의 static 의 의미를 아시는 것은 1번의 답변과 동일합니다.
3. 클래스 내에서 사용한 static 메소드는, 클래스의 인스턴스가 없어도 사용될 수 있는 메소드 입니다. this 포인터가 존재하려면 인스턴스가 존재해야 하므로, static 메소드에서는 this 포인터를 사용할 수 없습니다.
다음 내용을 정확히 파악하시면 될 것 같네요.
(1) 기억 부류 : extern, static, auto, register
(2) 모듈 내 static 변수와 함수의 의미와 기능
(3) 클래스 내 static 멤버 변수화 메소드의 의미와 기능
Orion Project : http://orionids.org
댓글 달기