지역변수
지역안에서 선언된 변수

범위 Scope
- 어디까지 적용되는가?
지속기간 Duration
- 메모리에 언제까지 적재되는가?


{}으로 지역을 구분한다. 

{}블록안에서 선언된 변수는 {}블록에서만 사용가능하다.
같은 블록안에서는 같은이름으로 변수를 선언하면 에러가 난다.
하지만 {{}}내부블록 안에서는 같은이름의 변수가 선언이 가능하다.
내부블록에서는 밖에 선언된 같은이름의 함수는 숨기고
내부블록안에 선언된 변수를 사용한다.

함수도 같은 이름은 불가능 하다.
하지만 파라미터가 다르다면 다른 함수로 볼 수 있다.

같은 이름의 함수를 사용하지 않는것이 좋지만
만약에 사용할려면 namespace를 사용해 사용한다.
namespace안에 namespace를 선언할 수 있다.

변수는 가급적 사용하는곳에서만 살아남게 선언한다.
객체지향프로그래밍의 기본적인 철학이다.

 

동적할당에선 범위,지속기간이 분리된다. 

#include <iostream>

using namespace std;

//만약에 같은이름의 변수와,함수를 사용하고 싶다면
//namespace를 사용한다.
namespace work1
{
	int a = 0;
	void getTest() {
		a += 1;
		cout << "work1::getTest() : " << a << endl;
	}
	
}


int a = 0;
void getTest() {
	a += 2;
	cout << "getTest() : " << a << endl;
}

int main()
{
	
	//apple변수를 선언해서 사용할 수 있게 된다.
	//OS로 부터 int메모리를 할당 받는다.
	//int main(){}안에서 사용가능 하다.
	int apple = 5;
	cout << apple << endl;
	if(true)
	{
		//{}밖에서 선언된 변수는 안 {}에서도 사용가능 하다.
		//apple변수가 위에 되어있기에 사용할 수 있다.
		//apple = 1;
		//cout << apple << endl;
		
		//같은이름으로 변수 선언이 가능하다.
		//내부 {} 안에서만 적용된다.
		//외부에 있는 apple은 같은 이름이 선언될 경우 숨긴다.
		//가급적이면 이름을 다르게 정하는것이 좋다.
		int apple = 1;
		cout << apple << endl;

		getTest();
		work1::getTest();
	}
	cout << apple << endl;

	return 0;
}

+ Recent posts