본문 바로가기
코드/C++

class static, function static

by bongin 2023. 10. 5.
728x90
반응형

class UserManager
{
public:
          static UserManager um;
          static UserManager* GetInstance()
          {
                    static UserManager um;
                    std::cout << "class static member : " << &(UserManager::um) << std::endl;
                    std::cout << "function static member : " << &(um) << std::endl;
                    return &um;
          }
          void AddUser() { _userCount++; }
          int GetUserCount() { return _userCount; }
private:
          int _userCount = 0;
};
UserManager UserManager::um;

int main()
{
          for (int i = 0; i < 1; i++)
          {
                    UserManager::GetInstance()->AddUser(); //---①
          }

          std::cout << &(UserManager::um) << std::endl; //---②
          std::cout << UserManager::GetInstance()->GetUserCount() << std::endl; //---③
}

 

출력:

class static member : 00B7C138 //---①
function static member : 00B7C13C //---①
00B7C138 //---②
class static member : 00B7C138 //---③
function static member : 00B7C13C //---③
//---③

 

 

--------------------

 

 

class UserManager
{
public:
          static UserManager um;

          static int e;
          static UserManager* GetInstance()
          {
                    static UserManager um;
                    std::cout << "class static member : " << &(UserManager::um) << std::endl;
                    std::cout << "function static member : " << &(um) << std::endl;
                    return &um;
          }
          void AddUser() { _userCount++; }
          int GetUserCount() { return _userCount; }
private:
          int _userCount = 0;
};
int e = 3;

int a;
int b = 1;
int arr[3] = {1, 2, 3};
int brr[3];

UserManager UserManager::um;

 

int main()
{

          int crr[3] = { 4, 5, 6 };
          int drr[3];
          int c;
          static int d;

 

          std::cout << "초기화 없는 전역 변수 a : " << &a << std::endl;
          std::cout << "초기화 있는 전역 변수 b : " << &b << std::endl;
          std::cout << "초기화 없는 지역 변수 c : " << &c << std::endl;
          std::cout << "초기화 없는 정적 변수 d : " << &d << std::endl;

          std::cout << "초기화 있는 정적 class 변수 e : " << &e << std::endl;
          std::cout << "초기화 있는 전역 배열 arr : " << &arr << std::endl;
          std::cout << "초기화 없는 전역 배열 brr : " << &brr << std::endl;
          std::cout << "초기화 있는 지역 배열 crr : " << &crr << std::endl;
          std::cout << "초기화 없는 지역 배열 drr : " << &drr << std::endl;


          for (int i = 0; i < 1; i++)
          {
                    UserManager::GetInstance()->AddUser(); //---①
          }

          std::cout << &(UserManager::um) << std::endl; //---②
          std::cout << UserManager::GetInstance()->GetUserCount() << std::endl; //---③
}

 

출력:

 

728x90
반응형

'코드 > C++' 카테고리의 다른 글

release 배포 시 dll 오류 날 때  (2) 2023.11.21
std::to_wstring(int), _tow_s(int, wchar_t, 2 or 10);  (0) 2023.11.16
github open source rpg  (0) 2023.10.03
SFML CMAKE  (0) 2023.10.02
깃헙 남의 게임 코드 실행  (0) 2023.10.01

댓글