9장 - 두 종류의 생성자

1) 이니셜라이저 리스트 생성자

std::initializer_list를 첫 번째 매개변수로 받고, 다른 매개변수는 없거나 디폴드 값을 가진 매개변수를 추가로 받는 생성자를 말한다. initializer_list는 짝수 개의 원소를 가져야한다.

class Fruit{
public:
	Fruit(initializer_list<double> args){
		prices.reserve(args.size());
		for(const auto& value : args){
			prices.push_back(value);
		}
	}
	// prices.assign(args); 이거 하나로도 가능하다.

private:
	vector<double> prices
}

위와 같이 범위기반 for문으로 각 원소에 접근하거나 vector 함수로 접근할 수 있다.


2) 위임 생성자

같은 클래스의 다른 생성자를 호출하는 방법이다. 생성자의 내부에서 호출할 수는 없고, 이니셜라이저에서 이것만 호출해야 한다.

class Fruit{
public:
	Fruit(int price) : Fruit(string name){ /*...*/ }

생성자의 호출 순서는 price 시작 → name 시작 → name 종료 → price 종료 이다. 이 때 서로 재귀적으로 호출하지 않아야 한다.