영넌 개발로그

[C++ 기초] class 내 static 변수, static 함수, const static 변수 본문

코딩/C++

[C++ 기초] class 내 static 변수, static 함수, const static 변수

영넌 2020. 12. 4. 05:04

class 내에 static을 사용하면 여러가지 효과가 생긴다.

 

1. static member variable

class를 만들어 놓고, 이후에 객체를 만들어 낸다. 하나의 클래스로부터 여러개의 객체가 나오는데 이런 객체와 상관없이 존재하는 변수가 있다. 모든 객체가 마치 자신의 변수처럼 공유한다. 따라서 변경된 내용은 모든 객체에게 보인다. (visible) 객체없이도 사용가능하며, 초기화는 클래스 바깥에서 별도로 해주어야한다.

class Car
{
public:
	static int year;
	Car() {	}
	void showYear() {
		cout << year << endl;
	}
	void changeYear(int _y) {
		year = _y;
	}
};

int Car::year = 2020; //초기화

int main() {

	Car c;
	c.showYear();

	Car d;
	d.showYear();

	cout << "without object: " << Car::year << endl;


	Car::year = 3030;
	c.showYear();
	d.showYear();
	cout << "without object: " << Car::year << endl;

	d.changeYear(4040);
	c.showYear();
	d.showYear();
	cout << "without object: " << Car::year << endl;

	return 0;
}

 

실행 결과

 

 

2. const static member variable

 처음 선언과 함께 초기화 해준다. 그 값은 변동이 불가능하며 꼭 class에서 선언할 때 초기화 해주어야한다.

class Car
{
public:
	const static int year = 1010;
	Car() {	}
	void showYear() {
		cout << year << endl;
	}
};


int main() {

	Car c;
	c.showYear();

	Car d;
	d.showYear();

	cout << "without object: " << Car::year << endl;

	return 0;
}

실행 결과

 

3. static member function

객체와 상관없이 존재한다. 객체를 생성하지 않고 함수를 사용할 수 있다는 의미이다.

static variable만 access 가능하다.

class Car
{
public:
	static int year;
	int month;
	Car() {	}
	static void showYear() {
		cout << year << endl;
		//cout <<month <<endl;
		//month는 객체를 필요로 하는 변수기 때문에 오류
	}
};

int Car::year = 2020;

int main() {

	Car c;
	c.showYear();

	Car d;
	d.showYear();

	cout << "without object: " << Car::year << endl;
	Car::showYear();
	//객체 없이 함수 사용가능

	return 0;
}

실행 결과

 

 

 

 

Comments