개발 Study
#27. const와 class, 멤버 이니셜라이저
HYuk
2021. 5. 6. 20:46
728x90
#26. 클래스의 생성자, 소멸자
class CLS { public: CLS() // 생성자 { cout<<"생성자 호출"< 생성자 -> 객체 생성 시 자동으로 호출 되는 것 클래스의 이름으로 정의 되는데, 생성자는 반환타입이 없지만 () 안에 인자(매개변수)를 넣어 줄
hyukee.tistory.com
#이니셜라이저
-> 메모리할당 단계에서 작동하는데, 선언과 동시에 초기화를 할 수 있다.
class 생성자의 선언부와 정의부 사이에 콜론(:)을 사용하여 이니셜라이저를 사용할 수 있다.
class CLS
{
const int m_iA;
public:
CLS(int _ia) // 생성자
:m_iA(_ia){} // 이니셜라이저
};
#const
1. class내에서 함수를 만들 때,
const를 사용한 const멤버 함수를 작성하면 class내의 멤버변수는 그 함수 내에서 변경이 불가능하다.
(단, 함수내의 지역변수는 변경이 가능하다.)
class CLS
{
int m_iA;
public:
void plus()const
{
int i; // 지역변수
m_iA = 300; //멤버변수 변경 불가능
i = 100; // 지역변수는 변경 가능
}
};
2. 함수의 리턴값이 래퍼런스의 형태일 때, 직접 접근하여 값변경이 가능하므로 함수 맨앞에 const를 붙여서 안전하게 사용할 수 있다.
#include "stdafx.h"
class CLS
{
int m_iA;
public:
void Set_m_iA()
{
m_iA = 10;
}
/*const*/ int& Get_m_iA() // 레퍼런스값 반환
{
return m_iA;
}
};
int main()
{
CLS cls;
cls.Set_m_iA();
cout << "m_iA: " << cls.Get_m_iA() << endl;
cls.Get_m_iA() = 100; // 값변경이 가능하다
cout << "m_iA: " << cls.Get_m_iA() << endl;
return 0;
}
3. 객체 생성시 const로 생성할 수 있다.
이때 class 모든 속성이 const가 되기 때문에, 값변경이 불가능하다(이니셜라이저를 이용한 초기화는 가능)
함수를 불러 올 때에도 const가 붙지 않은 함수는 내부에서 값변경을 할 수 있기 때문에, 해당함수를 불러오지 못함
#include "stdafx.h"
class CLS
{
int m_iA;
public:
CLS(int _a)
:m_iA(_a)
{
}
void Set_m_iA()
{
m_iA = 10;
}
int Get_m_iA()const
{
return m_iA;
}
};
int main()
{
const CLS cls(6);
cls.Get_m_iA();
cls.Set_m_iA(); // const형식의 함수가 아니기 때문에 불가능
return 0;
}
728x90