2013. 11. 23. 00:07 C언어

c++ 공부 요점정리 12







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
// =====================================================
// 27 복사 생성자의 호출 시기
// =====================================================
//
// 복사 생성자 호출 형태 3가지
//
// case 1 : 기존에 생성된 객체로 새로운 객체 초기화시
//         
// case 2 : 함수 호출시 객체를 값에 의해 전달시
//         
// case 3 : 함수 내에서 객체를 값에 의해 리턴시
//         

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

class AAA
{
public:
	AAA(){
		cout<<"AAA() 호출"<<endl;
	}
	AAA(const AAA& a){
		cout<<"AAA(const A& a) 호출"<<endl;
	}
};

int main()
{
	AAA obj1;
	
	// case 1 : 기존에 생성된 객체로 새로운 객체 초기화시
	AAA obj2=obj1;	

	return 0;
}

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

class AAA
{
	int val;
public:
	AAA(int i){
		val=i;
	}
	AAA(const AAA& a){
		cout<<"AAA(const A& a) 호출"<<endl;
		val=a.val;
	}
	void ShowData(){
		cout<<"val: "<<val<<endl;
	}
};

void function(AAA a)
{
	// 1. 전달되는 인자를 받기 위해서 a라는 메모리를 할당하고
	// (메모리의 할당도 이루어지고 생성자의 호출도 이루어
	// 졌기 때문에 전달인자 a도 객체이다)
	// 2. obj 객체가 a 객체의 복사 생성자를 호출하면서
	// 복사하고자 원하는 obj 객체를 매개변수로 전달
	// 되어 초기화 된다.
	a.ShowData();
}

int main()
{
	AAA obj(30);
	
	// 다음과 같이 함수를 호출할 때
	// 전달인자를 참조로 받지 않고
	// 값에 의해서 전달 받는 함수이므로
	// 전달인자의 값을 받기 위해 메모리를 
	// 할당한다.
	function(obj);

	return 0;
}

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

class AAA
{
	int val;
public:
	AAA(int i){
		val=i;
	}
	AAA(const AAA& a){
		cout<<"AAA(const A& a) 호출"<<endl;
		val=a.val;
	}
	void ShowData(){
		cout<<"val: "<<val<<endl;
	}
};

AAA function(void)
{
	AAA a(10);
	
	// a 객체를 값에 의해서 main 함수로 리턴한다.
	// 즉 main 함수에서 리턴되는 a객체의 복사본이
	// 생기게 된다.
	return a;
}

int main()
{
	function(); //function().ShowData();
	// a 객체의 복사본도 객체로써
	// 메모리 공간이 할당되고
	// 복사 생성자를 호출하면서 리턴되는 a 객체를
	// 인자로 전달한다.

	return 0;
}

//
// 요약하자면
//
int i = 10;
int j = j;
//
// 와 같은 경우에는 i의 값이 
// j 메모리 공간에 다이렉트로 대입이 되지만
//
AAA i(10);
AAA j = i;
//
// 와 같이 AAA 클래스의 객체인 경우에는
// j 의 생성자를 호출하는데 i 가 인자로 전달되어
// 복사 생성자를 호출해 값을 복사한다.










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

c++ 공부 요점정리 14  (0) 2013.11.23
c++ 공부 요점정리 13  (0) 2013.11.23
c++ 공부 요점정리 11  (0) 2013.11.21
c++ 공부 요점정리 10  (0) 2013.11.21
c++ 공부 요점정리 9  (0) 2013.11.21
Posted by 뮹실이

최근에 달린 댓글

05-22 20:44
Yesterday
Today
Total