반응형
출처 : 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; }
반응형