티스토리 뷰

언어/C++

8.11 정적 멤버 함수

js0331 2020. 4. 24. 18:51
#include <iostream>

using namespace std;

class Something
{
	private:
	static int s_value;
	
	public:
	static int getValue()
	{
		return s_value;
	}
};

int Something::s_value = 1024;

int main()
{
	cout << Something::getValue() << endl;
	
	Something s1;
	cout << s1.getValue() << endl;
	//cout << s1.s_value << endl;
	
	return 0;
}
	static int getValue()
	{
		// return this->m_value; error 발생!
		return s_value;
	}

 

static에서는 this를 사용불가!

 

또한, static 멤버 변수는 Constructor 즉, 생성자에서 초기화가 불가능하다.

 

#include <iostream>

using namespace std;

class Something
{
	public:
	class _init
	{
		public:
		_init()
		{
			s_value = 1234;
		}
	};
	
	private:
	static int s_value;
	int m_value = 0;
	
	static _init s_initializer;
	
	public:
	static int getValue()
	{
		// return this->m_value; error 발생!
		return s_value;
	}
	
	int temp()
	{
		return this->s_value + this->m_value;
	}
};

int Something::s_value = 1024;
Something::_init Something::s_initializer;

int main()
{
	cout << Something::getValue() << endl;
	
	Something s1, s2;
	cout << s1.getValue() << endl;
	//cout << s1.s_value << endl;
	
	//멤버 함수는 주소가 같음.
	int (Something::*fptr1)() = &Something::temp;
	
	cout << (s2.*fptr1)() << endl;
	
	// int (Something::*fptr2)() = &Something::getValue;	// error!
	int (*fptr2)() = &Something::getValue;
	
	cout << fptr2() << endl;
	
	return 0;
}

// 1234
// 1234
// 1234
// 1234

 

 

*함수변수 만들기

	//멤버 함수는 주소가 같음.
	int (Something::*fptr1)() = &Something::temp;
	
	cout << (s2.*fptr1)() << endl;
	
	// int (Something::*fptr2)() = &Something::getValue;	// error!
	int (*fptr2)() = &Something::getValue;
	
	cout << fptr2() << endl;

'언어 > C++' 카테고리의 다른 글

8.13 익명 객체  (0) 2020.04.24
8.12 친구 함수와 클래스 friend  (0) 2020.04.24
8.10 정적 멤버 변수  (0) 2020.04.23
8.9 클래스와 const  (0) 2020.04.23
8.5 위임 생성자  (0) 2020.04.22
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함