const에 대해서 다시 한번 복습해 보고,
C++에서의 멤버 함수, 객체 그리고 함수 오버로딩에 대해서 집어 보자.
const의 기본 개념부터 다시 한번 집어 보자.
#include <iostream>
void main()
{
// 포인터가 아니라면 n1, n2는 모두 같은 의미라고 봐도 무방.
const int n1 = 10;
int const n2 = 10;
//n1 = 10; 상수화 되어있어서 불가능
//n2 = 10; 마찬가지로 불가능
}
const int* pn
int n = 10;
// const int*를 하면 pn이 가르키는 대상을 보호한다.
const int* pn;
// pn은 누구든 가르킬 수 있으나
pn = &n;
// *pn = 20; pn이 가르키고 있는 것은 const 보호를 받는다.(컴파일에러)
// 그렇다고 int n 자체가 상수가 되어 버리는 것은 아니다.
n = 20;
int* const pn
int n = 10;
int n2;
// 초기에 꼭 값을 삽입해 주어야 한다.
int* const pn = &n;
// pn을 사용해 값을 변경하는 것은 상관없지만.
*pn = 20;
// pn이 n이 아닌 다른 값은 가르킬 수 없다.
//pn = &n2;
const int* function()
#include <iostream>
int g_n;
int* function1()
{
return &g_n;
}
const int* function2()
{
return &g_n;
}
void main()
{
// function에서 리턴된 값에 10을 넣는 다는 의미
*function1() = 10; // 가능하다. g_n = 10; 과 같다.
*function2() = 10; // const로 리턴 값을 보호 하고 있기 때문에 불가능
}
int function() const;
#include <iostream>
int g_val = 10;
class AAA
{
int n;
public:
// 멤버 함수안에선 멤버 변수의 값 수정이 불가능
int fun() const
{
int val;
// 하지만 함수내 지역변수는 가능하다.
val = 20;
// 그리고 전역 변수도 가능
g_val = 20;
// 단지 멤버 변수의 값 수정만 불가능하다.
n = 10;
return n; // 리턴은 가능하다.
}
};
void main()
{
AAA a;
a.fun();
}
const 함수와 오버로딩
#include <iostream>
class AAA
{
public:
// AAA a에서 fun 함수를 호출하면 이쪽으로 온다.
void fun()
{
std::cout << "fun() " << std::endl;
}
// const AAA ca에서 fun 함수 호출시 이쪽으로 이동.
void fun() const
{
std::cout << "fun() const" << std::endl;
}
};
void main()
{
// AAA객체와 const AAA객체
const AAA ca;
AAA a;
// 각각 같은 이름의 함수라도 서로 다른 함수를 호출한다.
ca.fun();
a.fun();
}
멤버 변수의 coinst
#include <iostream>
class AAA
{
// 멤버 변수를 const화
const int a;
int b;
public:
// 멤버 변수가 const화 되어 있다면 멤버 이니셜 라이징을 사용
AAA() : a(10)
{
// 불가능하다 이미 상수화 되어버렸기 때문에(안에는 쓰레기값이 존재)
// a = 10;
// 가능하다 int b는 private 변수이기 때문에
b = 10;
}
};
void main()
{
AAA a;
}
'프로그래밍 > 사소한 팁' 카테고리의 다른 글
Visual Community 자주 까먹는 부분 (0) | 2016.04.16 |
---|---|
게임테크 2010 Keynote 발표영상 (0) | 2010.05.21 |
정말 사소한 팁. (0) | 2010.03.19 |
프로그래머가 면접시 주의해야 할점. (0) | 2010.03.16 |
파일 쪼개기-main과 notmain (0) | 2010.03.05 |