본문 바로가기
공부정리/c++

생성자

by stdlib.h 2016. 7. 27.

클래스의 객체를 선언하면 메모리에 이 객체가 즉시 생성된다.


다만 클래스도 하나의 자료형인 만큼, 여느 변수처럼 할당만 되지 값이 있진 않다.


때문에 모두 쓰레기 값일 것이다.


그래서 초기화를 해줘야 한다.


만약

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class position
{
public:
    int x;
    int y;
};
 
int main(void)
{
    position a;
    a.x = 10;
    a.y = 10;
}
 
cs

이러한 코드가 있으면, 생성할 때마다 위의 코드와 같은, 변수를 하나 하나 초기화 해야 하는 번거로움이 있을 것이다.


이래서 등장한 것이 생성자이다.


생성자는 객체를 초기화 하기 위해서 존재한다.


우리가 int a = 5를 하는 것 처럼


position a(10, 10);을 하면 a라는 position클래스 객체를 x에 10, y에 10 을 넣어서 생성할 수 있다.


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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
class position
{
private:
    int x;
    int y;
public:
    position(int ax, int ay)
    {
        x = ax;
        y = ay;
    }
    void print()
    {
        printf("%d %d\n", x, y);
    }
};
 
int main(void)
{
    position a(1030);
    a.print();
}
 
cs


위와 같이 생성자는 컴파일러에 의해 호출되므로, 이름이 고정적으로 정해져 있다. 생성자의 이름은 항상 클래스의 이름과 동일하다.


필요할 경우 인수를 받을 수는 있지만, 리턴값은 있을 수 없다.




생성자는 객체가 생성될 때 자동으로 컴파일러가 호출한다. 사용자는 


객체 선언문의 뒤쪽에 생성자로 전달될 인수를 명시함으로써 두 가지


 방법으로 호출할 수 있다.


1. position a(10, 10);

2. position a = position(10, 10);


생성자도 분명 하나의 함수이기 때문에, 오버로딩이 가능하다.


그래서 디폴트 인수 사용도 가능하고 인라인으로 선언할 수도 있다.


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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
class position
{
private:
    int x;
    int y;
public:
    position(int ax, int ay)
    {
        x = ax;
        y = ay;
    }
    position(int ax)
    {
        x = ax;
        y = 0;
    }
    void print()
    {
        printf("%d %d\n", x, y);
    }
};
 
int main(void)
{
    position a(10);
    a.print();
}
 
 
 
cs

이런 코드가 가능하게 해준다.

'공부정리 > c++' 카테고리의 다른 글

복사 생성자  (0) 2016.07.27
파괴자  (0) 2016.07.27