C++ 에서 변수 앞에 const를 붙여 상수화가 되어, 그 값을 변경하지 못하게 한다.
변경하지 않아야 하는 변수에 엉뚱한 값을 할당하여, 에러가 발생할 경우 찾아내기가 쉽지 않다.
const 선언은 코드의 안정성을 높이기 위한 것이다.
https://www.youtube.com/watch?v=pFo84VEZCAM 에 const 동영상 강좌 설명이 참 잘 되어 있다.
C언어의 문법과 C++ 문법이 동일한 것은 C언어 강좌를 들어서 이해하는 것이 좋을 거 같다. 유튜브의 다양한 강좌를 들어보고 가장 마음에 들고 좋은 건 링크를 걸어서 적어둔다.
const 변수타입 변수명 = 초기화 값; // 선언시 초기화 값을 넣어야 된다. 값을 변경할 수 없다.
ex) const double PI = 3.14139;
const 변수타입 *변수명; // 변수명(포인터)이 가리키는 주소의 값을 변경할 수 없다.
#include <iostream> using namespace std; int main() { int* pta; int a = 10; pta = &a; *pta = 5;
cout << "*pta : " << *pta << endl; cout << "a : " << a << endl;
const int* ptb; // 변수명이 가리키는 주소의 값을 상수화 → 포인터가 가리키는 값을 상수화 int b = 20; ptb = &b; //*ptb = 12; // 컴파일 에러. ptb가 가리키는 주소의 값이 상수화되어 변경할 수 없다. b = 30; // 값은 변경할 수 있다.
cout << "*ptb :" << *ptb << endl;
int c = 15; ptb = &c; // 포인터 변수에 다른 주소를 할당할 수는 있다. cout << "*ptb :" << *ptb << endl; }
|
변수타입 * const 변수명 = 초기화값; // 포인터 변수를 상수화한다.
#include <iostream> using namespace std; int main() { int a; int* const pta = &a; int b; *pta = 10; // pta 가 가리키는 주소의 값을 변경할 수 있다. pta = &b; // 컴파일 에러. pta (포인터)가 가리키는 주소가 상수화되어 변경할 수 없다. } |
const 변수타입 * const 변수명 = 초기화 값; // 변수명이 가리키는 주소와 그 주소의 값도 변경할 수 없다.
#include <iostream> using namespace std; int main() {
int a; const int* const pta = &a; int b; a = 15; // 직접 값을 변경할 수 있다. *pta = 10; // 컴파일 에러. pta 가 가리키는 주소의 값이 상수화되어 변경할 수 없다. pta = &b; // 컴파일 에러. pta 가 가리키는 주소가 상수화되어 변경할 수 없다.
}
|
메소드의 상수화
#include <iostream> using namespace std;
class Account { private: int money; // 멤버 변수 public: Account() : money(0) {} Account(int money) : money(money) {}
void Deposit(const int d) { // 매개변수 상수화 money += d; cout << d << "원을 예금" << endl; }
void Withdraw(const int d) { // 매개변수 상수화 if (money >= d) { money -= d; cout << d << "원을 인출" << endl; } }
int viewMoney() const { // 메소드의 상수화 // money++; // 컴파일 에러. 멤버 변수 값을 변경할 수 없다. return money; } };
int main() {
Account account(1000);
cout << "잔고 : " << account.viewMoney() << "원" <<endl << endl;
account.Deposit(1000);
cout << "잔고 : " << account.viewMoney() << "원" << endl << endl;
account.Withdraw(500);
cout << "잔고 : " << account.viewMoney() << "원" << endl << endl; } |