2011. 3. 7. 21:42

<명시적인 것만을 허용!! explicit>
=>묵시적인 호출을 허용하지 않는다.
=>객체 생성관계를 분명히 하고자 하는 경우에 주로 사용.

 #include <iostream>
using std::cout;
using std::cin;
using std::endl;

class AAA
{
public:
 explicit AAA(int n)
 {
  cout<< "explicit AAA(int n)"<< endl;
 }
};

int main(void)
{
 AAA a1=10; //묵시적으로 변환 -> AAA a1(10); //Compile Error!!!
 return 0;
}



<예외를 둔다! : mutable>
=>const로 멤버함수가 상수화 되면 이 함수는 멤버 변수를 변경시키지 못한다.
그러나 멤버변수가 mutable로 선언이 되면 상수화된 멤버 변수라 할지라도 데이터 변경이 가능해 진다!!

 #include <iostream>
using std::cout;
using std::cin;
using std::endl;

class AAA
{
private:
 mutable int val;
 int val2;
public:
 void SetData(int a, int b) const
 {
  val1=a; //val1이 mutable이므로 가능!!!!
  val2=b; //Error!!!!
 }
};

int main(void)
{
 AAA a1;
 a1.SetData(10, 20);
 return 0;
}

,, mutable은 프로그램에 유연성을 제공한다는 장점이 있지만,,
권장하지 않는다......!!

출처: 열혈강의 c++


Posted by Triany