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
// ##########################################
//
// 44 멤버 함수의 위치
//
// ##########################################
//
// 객체에 의해서 공유되는 멤버 함수
//
// 
class AAA
{
	int n;
	
	public :
		A(int n){
			this->n = n;
		}
		
		void add(){
			n++;
		}
}

void main()
{
	// AAA 객체를 생성 할 때마다 add 함수가 
	// 각 객체 내에 중복으로 존재하면
	// 비효율적이다.
	// 실제는 각 객체들은 하나의 add 함수를 공유한다.
	// 일단, 컴파일하면
	// 코드자체가 코드영역이라 불리는 메모리 영역에 
	// 올라간다.
	// AAA 클래스의 add 함수 또한 코드 영역의 메모리
	// 공간에 올라간다.
	// a1 객체의 add 함수를 호출하면 코드 영역의 메모리
	// 공간에 올라간 add 함수를 호출하고
	// a2 객체의 add 함수를 호출하면 코드 영역의 메모리
	// 공간에 올라간 add 함수를 호출한다.
	// 즉 각 객체의 멤버함수는 코드영역의 함수를 공유한다.
	// 그러면 코드영역의 add 함수는 어떻게
	// a1에서 add 함수를 호출하면 a1의 멤버변수를 조작하고
	// a2에서 add 함수를 호출하면 a2의 멤버변수를 조작하느냐면
	// add 함수가 코드 영역에 올라갈때 
	// AAA 클래스의 포인터를 인자로 받도록 변경되어 
	// 올라간다.
	// void add(AAA* a)
	// { (a->n)++;}
	// 이런식으로 객체의 포인터를 전달 인자로 전달하기
	// 때문에 함수의 공유가 가능하다.
	//
	AAA a1(10);
	AAA a2(20);
	
	a1.add();
	a2.add();
}








Posted by 뮹실이

최근에 달린 댓글

07-21 00:11
Yesterday
Today
Total