C언어

c++ 공부 요점 정리 6

뮹실이 2013. 11. 16. 14:46







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
// =====================================================
// 20 객체의 생성 과정
// =====================================================
// 객체의 생성
// : 메모리 할당하고, 생성자의 호출한다
//
//
// ex
//
#include<iostream>
using std::cout;
using std::endl;

const int SIZE=20;

class AAA
{
	int i, j;
public:
	AAA(int _i, int _j) //생성자.
						// 생성자 호출시 인자를 
						// 전달해야한다
						// 전달하지 않도록 생성자를
						// 코딩하면
						// AAA 클래스 선언시 항상 같은
						// 값으로 초기화 할수밖에
						// 없음
	{ 
		i=_i, j=_j;
	}
	void ShowData()
	{
		cout<<i<<' '<<j<<endl;
	}
};

int main()
{
	AAA aaa(111, 222); // AAA 클래스의 객체를 생성하는데
						// 객체의 이름은 aaa이고
						// 111,222를 인자로 받을수 있는
						// 생성자를 호출
						// 클래스 외부에서 생성자를
						// 호출하므로 외부 접근이다.
						// 즉, 생성자를 public으로 선언
						//해야지 private로 선언하면 안됨
	aaa.ShowData();

	return 0;
}



// =====================================================
// 21 public 생성자, private 생성자
// =====================================================
//
// public 생성자 : 어디서든 객체 생성 가능
// private 생성자 : 클래스 내부에서만 가능
//
// 객체를 생성할 때
// 다음 두줄은 같은 의미이지만 
// 보통 아래 줄과 같이 사용한다.
// "aa","bb",22를 인자로 받는
// 생성자를 호출하면서 person 클래스인 
// 객체 p를 선언한다
Person p = Person("aa","bb",22)
Person p("aa","bb",22);

// 다음은 객체 생성이 아니라
// 함수의 선언이다
// a라는 이름의 함수인데 
// 리턴타입이 A 클래스인 객체이고
// 인자값을 받지 않는 void 형태의
// 함수 선언이다.
// 객체 생성으로 오해하지 않도록 주의 필요
// 
// 다음줄을 void 형태의 생성자를 호출하는 
// 클래스를 생성하는 것으로 인정하면
// 함수를 선언하는건지
// 클래스를 선언하는건지 알수없으므로
Person p();

// void 형태의 생성자를 호출하는
// 클래스를 선언할때는 
// 다음과 같이 괄호를 빼준다
Person p;

// 인자를 받는 생성자를 호출하는
// 클래스의 객체를 선언할때는 다음과 같이
// 선언
Person p("aa","bb",22);

// default 생성자
// : 생성자가 하나도 정의되어 있지 않은 경우
//   자동으로 삽입 되는 생성자
//   디폴트 생성자가 하는일은 아무거도 없다
// ex
// 다음과 같이 클래스에 생성자를 
// 선언해주지 않아도
class point
{
	int x,y;
	public:
	void show(){...}
}

// 컴파일시 자동으로 point(){}가 추가된다
// 즉, 위에 선언한 클래스와 다음의 클래스는 
// 같은 의미이다.
class point
{
	int x,y;
	public:
	point(){}
	void show(){...}
}

// 생성자는 오버로딩도 가능하다
// 다음과 같이 생성자를 여러개 
// 선언할 수도 있다.
class point
{
	int x,y;
	public:
	point()
	{...}
	point(int x, int y)
	{...}
	void show(){...}
}

// 생성자는
// 함수이다. 즉 함수의 특징을 가진다.
// 함수 오버로딩이 가능하다
// 디폴트 매개 변수의 설정도 가능하다

// 디폴트 매개 변수
class point
{
	int x,y;
	public:
	// 전달되는 인자가 없으면 0으로 
	// 대체한다
	point(int x=0, int y=0)
	{...}
	void show(){...}
}

// 디폴트 매개 변수
// 같은 의미
point p1;     == point1(0,0);
point p2(10); == point p2(10,0);