심볼릭 상수
변수의 상수화
- 변수를 const를 이용하여 상수화를 할 수 있다.
const int num = 10;
const float pi { 3.14 };
num = 20;
pi = 4;
- 위에서 const로 이미 상수화 시킨 시점에서 num은 상수가 되었는데 num에 다른 값을 넣어주면 상수 = 10; 이 되어버리기 때문에 에러가 난다.
- pi = 4 역시 에러가 난다.
int main()
{
int num;
cin >> num;
const int run_num(num);
num = 10;
}
constexpr
int main()
{
constexpr int com_num(10);
int num;
cin >> num;
constexpr int run_num(num);
}
파라미터의 상수화
void printNum(int num)
{
cout << num << endl;
}
- 이러한 함수가 있다고 할때, 보통은 받는 인자값 num을 바꾸지 않을 것이다.
- 바꿔야 하는 경우가 있다고 하면
void printNum(int num)
{
int n = num;
cout << n << endl;
}
- 이런식으로 복사해서 사용하는 경우가 일반적이다.
- 파라미터 자체를 바꾸는 경우는 드물다.
- 다른 프로그래머가 코드를
num = 30;
과 같이 사용하는것을 방지하고자 파라미터에 const 선언을 한다
void printNum(const int num)
{
int n = num;
cout << n << endl;
}
void printNum(const int& num)
{
int n = num;
cout << n << endl;
}
객체의 상수화
- 변수를 상수화 했듯이, 객체 역시 상수화 할 수 있다.
const Person person(10);
- 객체에 const선언이 붙게 되면, 이 객체를 대상으론 const 멤버함수만 호출이 가능하다.
- 객체의 const 선언은 이 객체의 데이터 변경을 하지 않겠다 라는 의미이다. 따라서 const 멤버함수의 호출만 허용하게 된다.
#include <iostream>
using namespace std;
clss Person
{
private:
int age;
public:
Person(int n) : age(n)
{ }
Person& addAge(int n)
{
age+=n;
return *this;
}
void showData() const
{
cout << "age: "<< age << endl;
}
};
int main()
{
const Person person(20);
person.showData();
return 0;
}