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