2013. 12. 4. 00:26 C언어

c++ 공부 요점정리 22






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
// ##########################################
//
// 39 상속된 객체와 포인터 관계
//
// ##########################################
//
// 객체 포인터 (객체를 가리킬수 있는 포인터)
// : 객체의 주소값을 저장할 수 있는 포인터
//   aaa 클래스의 포인터는 aaa 객체 뿐만아니라
//   aaa 클래스를 상속하는 derived 클래스 객체의
//   주소값도 저장 가능
//
// 사람 객체 포인터는 사람 객체를 가리킬수 있고
//                    학생 객체를 가리킬수 있고
//                    파트타임학생 객체를 가리킬수있다.
// 학생 객체는 학생 객체이자 사람 객체이기 때문이고
// 파트타임학생 객체는 파트타임학생 객체이자 
//                     학생 객체이자
//                     사람 객체이기 때문
// 즉, 사람 is a 사람
//     학생 is a 사람
//     파트타임학생 is a 사람
//
// 학생 객체 포인터는 사람 객체를 가리킬수 없고
//                    학생 객체를 가리킬수 있고
//                    파트타임학생 객체를 가리킬수있다.
// 사람 객체는 학생 객체가 될수 없고
// 파트타임학생 객체는 파트타임학생 객체이자 학생 객체이기 때문
//
// 즉, 학생 is a 학생
//     파트타임학생 is a 학생
//
//
//
// 예제
//
#include <iostream>
using std::endl;
using std::cout;

class Person
{
public:
	void Sleep(){ 
		cout<<"Sleep"<<endl;
	}
};

class Student : public Person
{
public:
	void Study(){
		cout<<"Study"<<endl;
	}
};

class PartTimeStd : public Student
{
public:
	void Work(){
		cout<<"Work"<<endl;
	}
};

int main(void)
{
	Person* p1=new Person;
	Person* p2=new Student;
	Person* p3=new PartTimeStd;

	p1->Sleep();
	p2->Sleep();
	p3->Sleep();

	return 0;
}

// 객체 포인터의 권한
// : 포인터를 통해서 접근할 수 있는 객체 멤버의 영역
//   aaa 클래스의 객체 포인터는 가리키는 대상에 상관없이
//   aaa 클래스 내에 선언된 멤버에만 접근 가능
//
//
//
#include <iostream>
using std::endl;
using std::cout;

class Person
{
public:
	void Sleep(){ 
		cout<<"Sleep"<<endl;
	}
};

class Student : public Person
{
public:
	void Study(){
		cout<<"Study"<<endl;
	}
};

class PartTimeStd : public Student
{
public:
	void Work(){
		cout<<"Work"<<endl;
	}
};

int main(void)
{
	// 파트타임 객체를 생성하면 이 객체안에는
	// 사람 클래스에 선언된 함수도 있고
	// 학생 클래스에 선언된 함수도 있고
	// 파트타임 클래스에 선언된 함수도 있다.
	// 파트타임 클래스의 객체는
	// 학생 클래스의 객체이자
	// 사람 클래스의 객체이므로
	// 사람 클래스의 포인터로 파트타임 객체를 
	// 가리킬수 있고
	// 학생 클래스의 포인터로 파트타임 객체를
	// 가리킬수 있고
	// 파트타임 클래스의 포인터로 파트탐임 객체를
	// 가리킬수 있다.
	// 비록 사람 객체 포인터, 학생 객체 포인터,
	// 파트타임 객체 포인터가 가리키는 대상은 같을지라도
	// 호출할 수 잇는 함수는 제한적이다.
	// 사람 객체 포인터로 가리킬수 있는 함수는 
	// 파트타임 객체 내의 사람 클래스의 함수이고
	// 학생 객체 포인터로 가리킬수 있는 함수는
	// 파트타임 객체 내의 학생 클래스의 함수와 
	// 사람 클래스의 함수이고
	// 파트타임 객체 포인터로 가리킬수 있는 함수는
	// 파트타임 객체 내의 모든 함수를 호출 할 수 있다.
	// 즉, 사람, 학생, 파트타임 클래스의 함수를 모두
	// 호출 할 수 있다.
	
	Person* p3=new PartTimeStd;

	p3->Sleep();
	
	// 
//	p3->Study(); // Error의 원인
//	p3->Work();  // Error의 원인

	return 0;
}

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

class AAA
{
public:
	void a(){ 
		cout<<"a"<<endl;
	}
};

class BBB : public AAA
{
public:
	void b(){
		cout<<"b"<<endl;
	}
};

class CCC : public BBB
{
public:
	void c(){
		cout<<"c"<<endl;
	}
};

int main(void)
{
	CCC* c = new C();
	c->a();
	c->b();
	c->c();
	// ccc 클래스는 ccc 클래스이자
	// bbb 클래스이자
	// aaa 클래스이므로 
	// 다음 문장이 성립한다.
	BBB* b = c;
	AAA* a = b;
	//
	// a,b,c는 모두 같은 위치를 가리키지만
	// 
	b->a();
	b->b();
	
	a->a();
	// 호출할 수 있는 함수는 제한된다.
	
	return 0;
}








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

c++ 공부 요점정리 24  (0) 2013.12.04
c++ 공부 요점정리 23  (0) 2013.12.04
c++ 공부 요점정리 21  (0) 2013.11.28
c++ 공부 요점정리 20  (0) 2013.11.27
c++ 공부 요점정리 19  (0) 2013.11.27
Posted by 뮹실이

최근에 달린 댓글

05-18 16:50
Yesterday
Today
Total