C++

생성자의 다양한 사용 방법

코다람쥐 2021. 12. 23. 12:11

 

https://www.youtube.com/watch?v=2rXLncQD27c&list=PLlJhQXcLQBJqywc5dweQ75GBRubzPxhAk&index=62

 

1. 생성자와 디폴트 매개변수

class Complex {
public:
	Complex(double real_=0, double imag_=0) {
		real = real_;
		imag = imag_;
	}

위와같이 디폴트 매개변수를 사용하여 생성자를 사용할 수 있다.

 

2. 생성자 초기화 목록

class Complex {
public:
	Complex(double real_ = 0, double imag_ = 0) : real(real_), imag(imag_){	}

1. 의 코드를 이렇게 간결하게 표현이 가능하고 이것을 초기화 목록이라고 한다.

 

Complex(double real = 0, double imag = 0) : real(real), imag(imag){	}

위와같이 초기화 목록을 쓰면 멤버변수와 매개변수가 c++에서 자동으로 구별 되는 기능이있다.

real_ => real

imag_ => imag

 

3. 생성자 위임

형태

생성자 : 생성자위임 { }

 

아래는 시간을 입력받아서 시, 분, 초를 저장하는 클래스이다.

class Time {
public:
	Time() : h(0), m(0), s(0) { }

	Time(int s_) {
		s = s_;
	}
	Time(int m_, int s_) {
		m = m_;
		s = s_;
	}
	Time(int h_, int m_, int s_) {
		h = h_;
		m = m_;
		s = s_;
	}
private:
	int h;
	int m;
	int s;
};

 

이 코드를 생성자 위임을 쓰면 아래와 같은 코드로 바뀐다.

 

#include <iostream>

using namespace std;

class Time {
public:
	Time() : h(0), m(0), s(0) { }

	Time(int s_) : Time() {
		s = s_;
	}
	Time(int m_, int s_) : Time(s_) {
		m = m_;
	}
	Time(int h_, int m_, int s_) : Time(m_, s_) {
		h = h_;
	}
private:
	int h;
	int m;
	int s;
};

생성자 위임을 쓰면 실수를 줄일 수 있고 코드가 더 간결해보인다.

그리고 초기화목록과 햇갈리지 않게 주의 해야한다.