생성자의 멤버들을 초기화
Member initializer list

생성자 선언할때 :를 이용해 선언한다.

public:
	Something()	//우선순위가 가장 높다.
		: m_i(1), m_d(3.14), m_c('a') ,m_b(m_i-1)
	{
	}


생성자 선언이 멤버선언시 기본값선언, 생성자에 변수에 값대입 보다 가장 우선순위가 높다.

#include <iostream>

using namespace std;
class B
{
private:
	int m_b;
public:
	B(const int& m_b_in)
		: m_b(m_b_in) {

	}
};
class Something
{
private://생성자 초기화가 있을시 기본값설정은 무시된다.
	int m_i = 100;
	double m_d = 200.1;
	char m_c = 'b';
	B m_b{ 2 };

public:
	Something()	//우선순위가 가장 높다.
		: m_i(1), m_d(3.14), m_c('a') ,m_b(m_i-1)
	{//생성자 초기화 선언후 동작한다.
		m_i *= 3;
		m_d *= 3;
	}
	void print() {
		cout << m_i << " " << m_d << endl;
	}
};

int main() {
	Something s;
	s.print();

	return 0;
}

위임생성자
Delegathing Constructors
생성자가 다른생성자를 사용하는것을 말한다.
파라미터가 여러개일때 자주 사용한다.

객체지향은 초기화,인풋은 하나인게 좋다.

과거엔 초기화함수(ex:init)를사용했으나 최근 c++에선 위임생성자를 지원해준다.

 

#include <iostream>
#include <string>

using namespace std;

class Student
{
private:
	int		m_id;
	string	m_name;

public:

	Student(const string& name)
		: Student(0,name) //위임생성자
	{

	}
	Student(const int& id, const string& name)
		:	m_id(id),
			m_name(name) 
	{
		//과거엔 초기화함수를 사용했다.
		init(id, name);
	}

	//초기화함수
	void init(const int& id, const string& name) {
		m_id = id;
		m_name = name;
	}

	void print() {
		cout << "id : " << m_id << " name : " << m_name << endl;
	}
	
};
int main()
{
	Student st1(0, "Choi");
	st1.print();

	//위임생성자
	Student st2("Choi");
	st2.print();
	return 0;
}

+ Recent posts