2013. 11. 15. 23:32 C언어

c++ 공부 요점정리 5







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
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
// =====================================================
// 16 클래스의 내부 접근과 외부 접근
// =====================================================
// 멤버 변수 or 멤버 함수에 접근함에 있어서
// 내부 접근과 외부 접근방식이 있다
//
// 내부 접근 ; 자기가 선언된 클래스 내의 접근
// 외부 접근 : 내부 접근 외의 접근
//
// ex 1
#include <iostream>
using std::cout;
using std::endl;

class Counter {
public:
	int val;
	void Increment(void)
	{
		val++; 			//내부 접근.
						// 같은 영역에 선언되어
						// 있는 멤버에 접근
	}
};

int main(void)
{
	Counter cnt; 		 // 지역 변수의 특징을 가지는 
						 // 지역 객체
	cnt.val=0; 			 // 카운터라는 자료형의 외부에서
						// 접근하므로 외부 접근.
	cnt.Increment(); 	 //외부 접근.
	cout<<cnt.val<<endl; //외부 접근.

	return 0;
}

//
// c++에서는 접근 제어에 관련된 키워드 3가지를 제공한다
// 접근 제어 키워드 : 멤버 변수나 멤버 함수를 선언하는데 있어서
// 					  접근 허용 범위를 이야기함
//
// 아래로 내려갈수록 접근 범위가 작아짐
// (접근을 최소한으로 허용함)
// 즉, public이 접근범위가 가장 큼
//
// public    : 외부 접근과 내부 접근을 모두 허용함
// protected
// private   : 클래스 내부 접근만 허용함
//			   public이나 protected or private 중 
//			   아무거도 입력하지 않으면 default로
//			   private 가 적용된다
//
// ex 2
//
#include <iostream>
using std::cout;
using std::endl;

const int OPEN=1;
const int CLOSE=2;

class Door{	
private: // 지금부터 선언하는 멤버 변수나 멤버 함수는
		// 접근 제어를 private로 하겠다는 의미
	int state;

public:// 지금부터 선언하는 멤버 변수나 멤버 함수는
		// 접근 제어를 public으로 하겠다는 의미
	void Open(){
		state=OPEN;
	}
	void Close(){
		state=CLOSE;
	}
	void ShowState(){
	    cout<<"현재 문의 상태 : ";
		cout<<((state==OPEN)? "OPEN" : "CLOSE")<<endl;	
	}
};

int main()
{
	Door d;
	d.state=OPEN; // 외부 접근이므로 private로
				// 선언된 state는 접근할 수 없다.
				// 컴파일 시 에러발생
	d.Open();		// public이므로 외부접근 가능
	d.ShowState(); // public이므로 외부접근 가능

	return 0;
}



// =====================================================
// 17 정보 은닉
// =====================================================
//
// 클래스 다자인 기본 원칙 : 캡슐화, 정보 은닉
//
// 정보 은닉을 통해
// 프로그램의 안정적 구현이 용이함
//
// 캡슐화 : 관련잇는 데이터와 함수를 하나로 묶는 것
//
// 클래스 객체의 생성과 소멸 : 생성자, 소멸자
//

// 정보 은닉전 예제
// 메인에서 클래스의 변수를
// 마음대로 변경시킬수 있다
#include<iostream>
using std::cout;
using std::endl;
using std::cin;

class Point
{
public:
	int x;   // x좌표의 범위 : 0 ~ 100
	int y;   // y좌표의 범위 : 0 ~ 100
};

int main()
{
	int x, y;
	cout<<"좌표입력 : ";
	cin>>x>>y;

	Point p;
	p.x=x;
	p.y=y;

	cout<<"입력 된 데이터를 이용해서 그림을 그림"<<endl;
	return 0;
}

// 정보 은닉 후 예제
// 메인에서(클래스 밖에서) 변수를 마음대로
// 변경 시킬 수 없고 클래스의 멤버 함수를
// 이용해 변수의 값을 변경시키므로
// (멤버 함수는 멤버 변수에 이상한 값을
// 입력 할 수 없는 기능을 하도록 선언하면)
// 변수 값에 이상한 값이 들어가는것을 막을 
// 수 있다.
#include<iostream>
using std::cout;
using std::endl;
using std::cin;

class Point
{
	int x;   // x좌표의 범위 : 0 ~ 100
	int y;   // y좌표의 범위 : 0 ~ 100
public:
	int GetX(){	return x; }
	int GetY(){	return y; }

	void SetX(int _x);
	void SetY(int _y);
};

void Point::SetX(int _x)
{
	if(_x<0 || _x>100)	
	{
		cout<<"X좌표 입력 오류, 확인 요망"<<endl;
		return;
	}
	x=_x;
}
void Point::SetY(int _y)
{
	if(_y<0 || _y>100)
	{
		cout<<"Y좌표 입력 오류, 확인 요망"<<endl;
		return;
	}
	y=_y;
}


int main()
{
	int x, y;
	cout<<"좌표입력 : ";
	cin>>x>>y;

	Point p;
	p.SetX(x);
	p.SetY(y);

	cout<<"입력 된 데이터를 이용해서 그림을 그림"<<endl;
	return 0;
}



// =====================================================
// 18 캡슐화(encapsulation)
// =====================================================
// 캡슐화 : 관련잇는 데이터와 함수를 하나로 묶는 것

// 캡슐화 전 예제
class Point
{
	int x;   // x좌표의 범위 : 0 ~ 100
	int y;   // y좌표의 범위 : 0 ~ 100
public:
	int GetX(){	return x; }
	int GetY(){	return y; }

	void SetX(int _x);
	void SetY(int _y);
};

class PointShow
{
public:
	void ShowData(Point p)
	{
		cout<<"x좌표: "<<p.GetX()<<endl;
		cout<<"y좌표: "<<p.GetY()<<endl;
	}

};

// 캡슐화 후 예제
class Point
{
	int x;   // x좌표의 범위 : 0~100
	int y;   // y좌표의 범위 : 0~100
public:
	int GetX(){	return x; }
	int GetY(){	return y; }

	void SetX(int _x);
	void SetY(int _y);

	void ShowData();  //캡슐화를 위해 추가된 함수.
};




// =====================================================
// 19 생성자
// =====================================================
// 생성자 : 객체를 생성과 동시에 초기화시켜준다
//          생성과 동시에 초기화되는것이 좋은 구조이다
//          객체 생성시 반드시 한번 호출되는 함수
//          클래스와 같은 이름의 함수이다.
//          리턴형이 없으며 리턴하지도 않는다
// ex
//
#include<iostream>
using std::cout;
using std::endl;
using std::cin;

const int SIZE=20;

class Person
{
	char name[SIZE];
	char phone[SIZE];
	int age;
public:
	void ShowData();
};

int main()
{
	// 클래스 default인 privateㄷ로 선언되어있기
	// 때문에 외부접근은 불가능한데
	// 외부접근을 시도했으므로
	// 컴파일시 에러발생
	Person p={"KIM", "013-113-1113", 22};
	return 0;
}

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

const int SIZE=20;

class Person
{
	char name[SIZE];
	char phone[SIZE];
	int age;
public:
	void ShowData();
	void SetData(char* _name, char* _phone, int _age);
};

int main()
{
	Person p;
	// 클래스 생성과 동시에 초기화는 아니다
	// 초기화시키기 위한 방법일뿐
	p.SetData("KIM", "013-333-5555", 22);
	p.ShowData();

	return 0;
}








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

리눅스(우분투 10.10) 공유 메모리 예제 2 공유메모리 제거  (0) 2013.11.18
c++ 공부 요점 정리 6  (0) 2013.11.16
c++ 공부 요점정리 4  (0) 2013.11.14
c++ 공부 요점 정리 3  (0) 2013.11.13
c++ 공부 요점 정리 2  (0) 2013.11.11
Posted by 뮹실이

최근에 달린 댓글

06-27 18:26
Yesterday
Today
Total