반응형

하 개 오랜만에 글쓴다....

 

한국인을 위한 코드 미리보기

#include <iostream>

class Object
{
private:
	static int m_obejctCount;
	const char* m_name;
public:
	Object(const char* _name)
	{
		++m_obejctCount;
		m_name = _name;
		std::cout << "CreateObject (" << m_name << ")\n";
	}
	~Object()
	{
		--m_obejctCount;
		std::cout << "DeleteObject (" << m_name << ")\n";
	}
	static int GetObjectCount()
	{
		return m_obejctCount;
	}
	static void DestroyObject(Object* _target)
	{
		delete _target;
	}
};
int Object::m_obejctCount = 0;

int main()
{
	Object* a = new Object("Object1");
	Object* b = new Object("Object2");
	Object* c = new Object("Object3");

	Object::DestroyObject(c);

	std::cout << "Object Count : " << Object::GetObjectCount() << "\n";
}


먼저 알아가야 할 것..

밑줄  << 이렇게 밑줄 쫙 그어놓은건 ㅈㄴ 중요한거고

배경  << 이렇게 배경해놓은거는 그냥 한번 봤으면 좋겠다는 정도고

밑줄배경 << 이건 그냥 개 ㅈㄴ게 ㅁㅊ 레전드로 중요한거다 다른거 안봐도 이건 봐줍메 제발

class내에서 변수에 static을 붙였다 = 정적멤버변수

class내에서 함수에 static을 붙였다 = 정적멤버함수

(이게 ㅈㄴ게 중요!!!!!!) static은 전역변수, 함수 취급을 받는다. 하지만 class 내부에 멤버로 주게 될 경우 그냥 그 class 내부에서만 쓸 수 있게 한정해줄 뿐이다. 너무 어렵게 생각하지 말자... 첨에 이 개념을 못가져가서 많이 헷갈렸다.


static은 프로그램 시작시 할당되는데, 문제는 class객체의 생성 전에 할당된다는 것이다....

때문에 정적멤버변수는 class안에서 초기화를 못한다...(class 내부에서 해보고싶으면 해보자... 내 기억엔 에러뜸...)

따라서 정적멤버변수는 전역범위에서 따로 초기화를 해줘야 한다!!

이렇게...

 

그리고 위와 같은 이유로 멤버함수도 당연히 this포인터를 받지 못한다...

따라서 this->m_name과 같이 정적멤버함수는 비정적멤버변수에 접근하지 못한다.

근데 ㅈㄴ 웃긴게... 위에 사진처럼 정적멤버함수에 매개변수로 자신의 class를 자료형으로 줄 수 있음... 심지어 위에 사진에 있는 _target의 비정적멤버변수도 사용 가능. (이 순간 "아니 ㅅㅂ!! this는 못쓰는데 이건 어캐 씀?" 라는 의문을 가짐)

당연히 static은 프로그램 시작 시 할당되는데.... class의 존재여부를 모르는게 당연한거 아닌가? 해서 교수님한테 물어봄ㅋㅋ

교수님왈, 매개변수를 받아 쓰는건 초기화 이후의 과정이므로... 상관없다... 라는 느낌으로 말하셨는데 느낌만 알겠고 설명을 못하겠다...

 

자 여기까지 static의 멤버변수와 멤버함수에 대한 설명을 다 했다!  라고 하고싶은데 중요한게 하나 더 남아있음..ㅇㅇ

위에서 설명했지만 class내의 static도 전역변수,함수라고 생각하라고 했는데, 말 그대로 객체가 여러 개여도 정적 멤버는 하나밖에 존재할 수 없다.

따라서 위 사진에 a, b, c객체가 m_objectCount의 값을 공유한다는 것이다.

더 쉽게 말하면 그냥 m_objectCount라는 전역변수가 있는데, Object라는 class 내에서만 쓸 수 있는 것 뿐이다. 때문에 출력해보면 정적멤버변수인 ObjectCount가 생성(+1)-생성(+1)-생성(+1)-삭제(-1) = 2가 나오는 것이다!

 

하 적다보니 귀찮아서 그냥 대충 설명하게 된다... 알아서 잘 이해하셨길...

반응형

+ Recent posts