C++ const

const

constant(상수)의 줄임말로 이름과 같이 상수처럼 그 내용이 변경되지 않도록 한다.

아레는 기본적으로 변수에 사용하는 방법이다.

const int x = 2; // 변수 x는 항상 1, 변경 불가, 초기값 지정해야
int const y = 3; // 비추, const는 자료형 앞에 씀
const int z{4}; // Uniform initialization, C++11, z{}
constexpr int a = 5; //C++11부터 가능, compile-time constant

함수

함수 선언시 함수, 매개변수, 리턴형에 const를 선언해서 read only(읽기 전용)을 나타낼 수 있다.

void func(const int v);
const int func(int v);
void func(void) const; //const가 함수를 수식

멤버함수

함수() const는 const 멤버함수

  • const 멤버함수는 const 함수만 호출할 수 있고, 일반 함수를 호출할 수 없다. 만약 함수가 const 함수라면 가능하다.
  • const 멤버함수에서는 멤버변수를 변경할 수 없다.

객체

  • 객체가 const로 지정되면 해당 객체에 초기화된 데이터는 변경할 수 없다.
  • const로 지정된 멤버함수만 호출할 수 있다.
  • 객체를 const로 지정하려면 객체 정의시 클래스 명 앞에 const를 추가한다.
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <string.h> //string.h
using std::cout;

class Cat{
private: //생략가능
    int age;
    std::string name; // A
    // char name[20]; // A
    //const char *name; //B, 비추
public:
    Cat(int age, std::string n){
        this->age = age;
        name = n;
        cout << name << "made";
    }
    ~Cat(){cout << name <<"destroyed";}
    int getAge() const;
    std::string getName() const;
    void setAge(int a);
    void setName(std::string pName);
    void meow() const;
};
int Cat::getAge() const
{
return age;
}
void Cat::setAge(int age)
{
this->age=age;
}
void Cat::setName(std::string pName)
{
    //strcpy(name,pName); //A
    name=pName; //B, 주소 대입
}
std::string Cat::getName() const
{
return name;
}
void Cat::meow() const{
cout << name << "고양이가 울어요\n";
}

int main() {
    Cat nabi(1, "나비"), yaong(1, "야옹"), * pNabi;
    cout << nabi.getName() << "출생 나이는" << nabi.getAge() << "살이다.\n";
    cout << yaong.getName() << "출생 나이는" << yaong.getAge() << "살이다.\n";
    pNabi = &nabi;
    cout << pNabi->getName() << "출생 나이는" << pNabi->getAge() << "살이다.\n";
    nabi.setName("Nabi");
    nabi.setAge(3);
    cout << nabi.getName() << "나이는" << nabi.getAge() << "살이다.\n";
    yaong.meow();
    nabi.meow();
    return 0;
}