반응형
출처 : KGCA 게임 아카데미(http://www.kgcaschool.com/). 수업 예제 파일.
explicit : 생성자 앞에 붙여서 묵시적 형변환을 금지하는 키워드
mutable : 변수 앞에 붙여서 const함수에서도 값이 변경될 수 있도록 하는 키워드.
classes.h
#pragma once
#include <iostream>
class class_A
{
private:
int m_iValue;
public:
int Get() const { return m_iValue; }
class_A(int iValue) : m_iValue(iValue) {}
class_A(class_A& copy) : m_iValue(copy.m_iValue) {}
~class_A() { }
};
class class_E
{
private:
int m_iValue;
public:
int Get() const { return m_iValue; }
//explicit는 생성자 앞에 붙여서 묵시적인 호출을 방지한다.
//이는 명시적인 호출만 가능토록 한다.
explicit class_E(int iValue) : m_iValue(iValue) {}
//explicit를 복사 생성자에 사용하면
//대입 연산자를 통하여 객체의 생성 및 초기화를 할 수 없다.
explicit class_E(class_E& copy) : m_iValue(copy.m_iValue) {}
~class_E() { }
};
class class_M
{
private:
int m_iValue;
//mutable이 붙은 변수는 const함수에서도 변경이 가능하다.
//즉 이는 const에 대한 예외가 된다.
mutable int m_iData;
public:
int Get() const
{
return m_iValue;
}
int Get(int iValue) const
{
m_iData = iValue; //가능
//m_iValue = iValue; //불가능
return m_iData;
}
explicit class_M(int iValue) : m_iValue(iValue) { }
explicit class_M(class_M& copy) : m_iValue(copy.m_iValue) { }
~class_M() { }
};
main.cpp
#include "classes.h"
int main()
{
class_A tA(3);
class_A tB = 4;
class_A tC = tA;
class_E tD(5);
//class_E tE=3 // Error 묵시적 변환이 발생하지 못한다.
class_E tE(tD); //OK
class_M tF(6);
std::cout << "tA : "<< tA.Get() << std::endl;
std::cout << "tB : "<< tB.Get() << std::endl;
std::cout << "tC : "<< tC.Get() << std::endl;
std::cout << "tD : "<< tD.Get() << std::endl;
std::cout << "tE : "<< tE.Get() << std::endl;
std::cout << "tF : "<< tF.Get() << std::endl;
std::cout << "tF : "<< tF.Get(7) << std::endl;
}반응형