2013. 11. 23. 20:06 C언어

c++ 공부 요점정리 14








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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
// =====================================================
// 29 클래스와 const
// =====================================================
//
// const 객체
// : 데이터의 변경이 허용되지 않는 객체
//    const 함수 이외에는 호출 불가
//
const int i = 10; // const 변수
const AAA a(10); // const 객체

//
// 예제
//
#include <iostream>
using std::cout;
using std::endl;

class AAA
{
	int num;
public :
	AAA(int _num) : num(_num) {}
	void Add(int n){
		num+=n;
	}
	void ShowData(){
		cout<<num<<endl;
	}
	//
	// 해결방법
	//
	//void ShowData(){
	//	cout<<num<<endl;
	//}
};

int main()
{
	const AAA aaa(10);
	
	// const 객체이기 때문에 
	// 멤버 변수 변경이 불가능하므로
	// 컴파일시 에러 발생
	aaa.Add(10);  // Compile Error
	
	// const 객체인데
	// showdata 함수가 상수화 되어 있지 않기 때문에
	// 멤버 변수를 조작할 가능성이 있어서 
	// 컴파일시 에러 발생
	// 컴파일러는 함수가 멤버 변수를 조작하는지
	// 검사하는게 아니라 
	// 함수가 상수화 되었는지 아닌지를 검사해
	// 멤버 변수 조작의 가능성을 확인하기 때문에
	// 실제 상수화 되지 않은 함수에서
	// 멤버 변수를 조작하지 않더라도
	// 컴파일시에는 에러가 발생한다.
	// 해결방법으로는
	// showdata에서는 멤버 변수를 조작할 
	// 필요가 없으므로 함수를 const 선언으로
	// 상수화 해준다
	//
	// 즉, const 객체는 const 함수 이외에 호출 불가
	//
	aaa.ShowData();  // Compile Error

	return 0;
}

// 
// const와 함수 오버로딩
// : const도 함수 오버로딩 조건에 포함된다.
//
void func(int n) const {...}
void func(int n) {...}

//
// 예제
//
#include <iostream>
using std::cout;
using std::endl;

class AAA
{
	int num;
public :
	AAA(int _num) : num(_num) {}

	void ShowData(){
		cout<<"void ShowData() 호출"<<endl;
		cout<<num<<endl;
	}
	void ShowData() const {
		cout<<"void ShowData() const 호출"<<endl;
		cout<<num<<endl;
	}
};

int main()
{
	const AAA aaa1(20);
	AAA aaa2(70);
	
	// 자동으로 상수화된 showdata을 호출
    aaa1.ShowData(); 
	
	// 자동으로 상수화되지 않은 showdata을 호출
	aaa2.ShowData(); 
	return 0;
}








'C언어' 카테고리의 다른 글

c++ 공부 요점정리 16  (0) 2013.11.23
c++ 공부 요점정리 15  (0) 2013.11.23
c++ 공부 요점정리 13  (0) 2013.11.23
c++ 공부 요점정리 12  (0) 2013.11.23
c++ 공부 요점정리 11  (0) 2013.11.21
Posted by 뮹실이

최근에 달린 댓글

05-24 01:01
Yesterday
Today
Total