2008. 12. 30. 23:12
C/C++/MFC
const에 대해 정리해봤습니다. 약간 불명확한 부분이 있을수도 있겠네요.
const는 변수, 포인터형, 참조형, 함수, 클레스 등에 붙을수 있음.
1. 변수
예)
const i = 100;
i 값 변경불가
2. 포인터형 : 기본적으로 2가지 형태가 있을 수 있음. 그외 여려형태가 가능
예1) 값은 변경 불가능하지만 주소는 변경가능한 형태
int temp = 100, temp2 = 200;
const int *ipConst = &temp; // *ipConst 값 변경 불가, ipConst(주소)값은 변경가능
// int const *ipConst = &temp; // 이런형태로 써도 위와 같은 의미
// *ipConst = 300; // 불가능한 형태
ipConst = &temp2; // 가능한 형태
예2) 주소는 변경 불가능하지만 값은 변경가능한 형태
int temp = 100, temp2 = 200;
int * const iConstp = &temp; // *iConstp 값 변경 가능, iConstp(주소)값은 변경불가
*iConstp = 300; // 가능한 형태
//iConstp = &temp2; // 불가능한 형태
주의 : const가 결합되는 위치가 값인지 주소인지에 유의
3. 참조형
예1) 직접적으로 값과 주소 모두 변경 불가능하지만 참조 원본을 통한 값변경은 가능한 경우
int temp3 = 100, temp5 = 200;
int const &ircVal = temp3;
//ircVal = 2000; // 컴파일 에러 발생 (const 참조는 값 변경불가)
//ircVal = temp5; // 주소도 변경불가
temp3 = 9000; // 참조 원본은 변경가능, 결과적으로 ircVal의 값도 변하게됨
예2) 직접적으로 값과 주소 모두 변경 가능하지만 참조가 가르키는 값은 변화가 없는경우
int temp4 = 300, temp5 = 500;
int & const icrVal = temp4;
icrVal = 6000; // 값변경 가능, 하지만 값에 변경이 안됨
cout << " icrVal " << icrVal << endl; // 여전히 300이 찍힘
icrVal = temp5; // 주소도 변경가능 역시 값에 변경이 안됨
cout << " icrVal " << icrVal << endl; // 여전히 300이 찍힘
4. 함수 : class의 멤버함수인 경우만 const 함수 사용가능. 해당 class의 멤버변수를 변경할수 없음.
예)
class ConstTest
{
public:
int m_iA;
ConstTest()
{ m_iA = 1; }
int const_func1( int &a_iA, int &a_iB) const
{
int a = 1;
int b = 2;
int c = 0;
c = a + b;
a_iA += 100;
// m_iA += 100; // 에러발생. 멤버변수는 변경 불가
return m_iA;
}
};
5. 클레스
예)
const CMyConstClass CC;
// 내부 멤버변수 전체를 변경불가능한 클레스,(생성자 함수만은 예외)
// 모든 내부 멤버 함수는 기본적으로 const 함수가 되야만함.
// 내부 함수의 지역 변수및 인자로 받은 변수는 변경가능.
const는 변수, 포인터형, 참조형, 함수, 클레스 등에 붙을수 있음.
1. 변수
예)
const i = 100;
i 값 변경불가
2. 포인터형 : 기본적으로 2가지 형태가 있을 수 있음. 그외 여려형태가 가능
예1) 값은 변경 불가능하지만 주소는 변경가능한 형태
int temp = 100, temp2 = 200;
const int *ipConst = &temp; // *ipConst 값 변경 불가, ipConst(주소)값은 변경가능
// int const *ipConst = &temp; // 이런형태로 써도 위와 같은 의미
// *ipConst = 300; // 불가능한 형태
ipConst = &temp2; // 가능한 형태
예2) 주소는 변경 불가능하지만 값은 변경가능한 형태
int temp = 100, temp2 = 200;
int * const iConstp = &temp; // *iConstp 값 변경 가능, iConstp(주소)값은 변경불가
*iConstp = 300; // 가능한 형태
//iConstp = &temp2; // 불가능한 형태
주의 : const가 결합되는 위치가 값인지 주소인지에 유의
3. 참조형
예1) 직접적으로 값과 주소 모두 변경 불가능하지만 참조 원본을 통한 값변경은 가능한 경우
int temp3 = 100, temp5 = 200;
int const &ircVal = temp3;
//ircVal = 2000; // 컴파일 에러 발생 (const 참조는 값 변경불가)
//ircVal = temp5; // 주소도 변경불가
temp3 = 9000; // 참조 원본은 변경가능, 결과적으로 ircVal의 값도 변하게됨
예2) 직접적으로 값과 주소 모두 변경 가능하지만 참조가 가르키는 값은 변화가 없는경우
int temp4 = 300, temp5 = 500;
int & const icrVal = temp4;
icrVal = 6000; // 값변경 가능, 하지만 값에 변경이 안됨
cout << " icrVal " << icrVal << endl; // 여전히 300이 찍힘
icrVal = temp5; // 주소도 변경가능 역시 값에 변경이 안됨
cout << " icrVal " << icrVal << endl; // 여전히 300이 찍힘
4. 함수 : class의 멤버함수인 경우만 const 함수 사용가능. 해당 class의 멤버변수를 변경할수 없음.
예)
class ConstTest
{
public:
int m_iA;
ConstTest()
{ m_iA = 1; }
int const_func1( int &a_iA, int &a_iB) const
{
int a = 1;
int b = 2;
int c = 0;
c = a + b;
a_iA += 100;
// m_iA += 100; // 에러발생. 멤버변수는 변경 불가
return m_iA;
}
};
5. 클레스
예)
const CMyConstClass CC;
// 내부 멤버변수 전체를 변경불가능한 클레스,(생성자 함수만은 예외)
// 모든 내부 멤버 함수는 기본적으로 const 함수가 되야만함.
// 내부 함수의 지역 변수및 인자로 받은 변수는 변경가능.
'C/C++/MFC' 카테고리의 다른 글
MFC (디바이스 컨텍스트와 관련 클래스) (0) | 2008.12.30 |
---|---|
윈도우즈와 메시지 (0) | 2008.12.30 |
API 기초?? (0) | 2008.12.30 |
C프로그래밍 별모양~ (0) | 2008.12.30 |
BHO 란? (0) | 2008.12.30 |