2013. 11. 23. 21:14 C언어

c++ 공부 요점정리 16








1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
// =====================================================
// 31 explicit and mutable
// =====================================================
//
// explicit
// : 명시적 호출만 허용한다.
//
#include<iostream>
using std::cout;
using std::endl;

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

int main(void)
{
	// 이문장은 c 스타일의 문장으로써
	// 묵시적으로 AAA a1(10); 와 같이 
	// 형변환이 되어서 객체 생성이 완료되는것
	// 즉 묵시적으로 생성자를 호출하는 것이다.
	// 그런데 생성자가 explicit로 선언되어 있으면
	// 묵시적 호출이 허용되지 않으므로 
	// 컴파일시 오류 발생
	AAA a1=10; 
	// AAA a1=10; 이 문장은 묵시적으로 변환되지만
	// 혼란을 초래 할 수 있기 때문에 권장되지 않는다
	// 따라서 생성자에 explicit를 선언함으로써
	// 혼란을 초래하는 문장에서 컴파일 오류를 발생시켜
	// 예방할수있다.
	
	AAA a1(10); // 생성자를 명시적으로 호출

	return 0;
}


// mutable
// : const에 예외를 둔다
//  별로 유용하지도 않고
//  사용을 권장하지 않는다.
//
#include<iostream>
using std::cout;
using std::endl;

class AAA
{
private:
	mutable int val1;
	int val2;

public:
	// setdata가 상수화 되어있어서
	// 멤버 조작이 불가능하다
	// 그러나 mutable 선언이 되어있는
	// val1은 조작이 가능하다
	// 즉 const에 예외를 둔다...
	// 
	void SetData(int a, int b) const 
	{
		val1=a;  // val1이 mutable이므로 OK!
		val2=b;  // Error!
	}
};

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









Posted by 뮹실이

최근에 달린 댓글

06-10 16:43
Yesterday
Today
Total