728x90

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;
   
}
 


728x90

'C++ > C++ 문법' 카테고리의 다른 글

C++ stack 영역  (0) 2019.12.17
C++ STL Vector(벡터)  (0) 2019.12.01
C++ 포인터 이해  (0) 2019.11.30
C++ 클래스 상속  (0) 2019.11.29
C++ 이동 생성자(move constructor), 이동 대입 연산자(Move assignment operator)  (2) 2019.11.28
블로그 이미지

Link2Me

,