(C++) 8.3 생성자 Constructors

이준우·2021년 11월 23일
0

전 시간에 배운 내용을 잠시 보면 이와 같다.
근데, class 내부에 있는 변수를 초기화하려면 어떻게 해야할까?

답은 private를 건들면 되긴한다.
private에 들어있는 변수를 초기화 해주는 방법이 있긴 하다. 하지만 C++에 새로운 문법이 나온건데(2019기준), 이는 생성자이다.

생성자란, 기준을 만들어주는 것이다. 다른 값으로 초기화를 하지 않는 이상 그 값을 계속해서 유지한다.
class의 이름과 똑같은 이름을 가진 생성자를 만들고 그 안에서 변수를 초기화 해주면 프로그램은 정상적으로 작동하는 것을 볼 수 있다.

또한 디버거를 찍어서 확인해보면, Fraction frac가 동작하는 즉시 Fraction()생성자로 들어가 초기화를 하고 frac.print()가 실행되는 것을 볼 수 있다. 따라서 생성자는 Fraction frac가 실행되는 즉시 바로 실행이 된다.

또한 여기서 차이점이 하나 더 발생하는데, 생성자에 매개변수가 없을 시에 Fraction frac;처럼 작성할 수 있다. 이게 도대체 무슨 소리냐? 라고 할 수 있는데, 다음 그림을 보자.
생성자에 매개변수가 있을 시에는 Fraction one_thirds(1, 3);으로 작성하고 생성자에 매개변수가 없을 시에는 () 넣지 않아도 된다. 헷갈릴 수 있지만 잘 알아두는 것이 좋다.


만약 생성자 매개변수를 초기화 한다면 어떤 일이 벌어질까?
초기화를 해도 입력된 값으로 초기화 된 것을 알 수 있다. 하지만 이런식으로 1만 넣어도 작동하는 것을 알 수 있다.


다시 처음으로 돌아가자면
이부분에서 생성자가 없는데, 이는 생성자가 없는 것이 아니라 숨어 있는 것이다. 즉, 이와 같은 형태이다.

따라서 생성자가 없으면 알아서 만들어 준다.


이 매개변수가 있는 생성자일때에는 정말 잘 알아두어야 한다. 거의 3가지 역할을 할 수 있기 때문이다.
1.)

2.)
3.)

즉, 1, 2, 3번을 보면 매개변수가 2개, 1개, 하나도 없어도 동작을 하는 것을 볼 수 있다.


저 둘의 차이점은 무엇일까?
{}같은 경우에는 {}안의 값이 무조건 같은 자료형이여야 한다. {1.0, 3}과 같이 작성하면 compiler는 오류를 내보낸다. {1, 3}처럼 작성을 해야한다.

하지만 ()같은 경우에는 ()안에 들어가는 자료형이 달라도 되긴 한다. complier가 경고만 보낼 뿐 오류를 내보내진 않는다. 최근들어 {}가 더 엄격하게 작동하므로 이를 선호하는 개발자도 많아지고 있다.


이중 class에 대해 제대로 하진 않겠지만, 이러한 순서를 갖는 다는 것을 알아두자. 어찌보면 당연한 거지만 알아두면 좋다.

profile
멋진 인생을 살기 위한 footprint

0개의 댓글