반응형
public:
Something()
{
m_i = 1;
m_d = 3.14;
m_c = 'a';
}
이런 식으로 생성자를 만들어줄 수도 있지만 더 간편한 방법이 존재합니다. initialize list라고 말합니다.
public:
Something()
: m_i(1), m_d(3.14), m_c('a')
{}
이런식으로 써도 똑같은 방식이며 실전에서는 이러한 방식을 주로 사용할 것입니다.
전체 코드
#include <iostream>
using namespace std;
class Something
{
private:
int m_i;
double m_d;
char m_c;
public:
Something()
: m_i(1), m_d(3.14), m_c('a')
{}
void print()
{
cout << m_i << " " << m_d << " " << m_c << endl;
}
};
int main()
{
Something som;
som.print();
return 0;
}
이런 식으로 써줄 수 있는 것입니다. 이렇게 되면 something 생성자에서 정의했던 것대로 출력되는 것을 볼 수 있습니다.
생성자를 사용해주는 이유는 어떤 변수를 만들면서 그 변수의 값을 지정해주고 싶을 때 사용하는 것입니다.
이렇게 할 경우 변경을 할 때 편하게 변경할 수 있다는 장점이 있습니다.
private:
int m_i = 100;
double m_d = 100.0;
char m_c = 'F';
int m_arr[5] = { 100, 200, 300, 400, 500 };
B m_b{ 1024 };
public:
Something()
: m_i{ 1 }, m_d{ 3.14 }, m_c{ 'a' }, m_arr{ 1, 2, 3, 4, 5 }, m_b{ m_i - 1 }
{}
이렇게 하면 어떻게 될까요?
둘 다 초기화를 해주고 있는 상태에서 초기화를 해준다면 생성자가 우선으로 생성이 됩니다. 생성자가 우선순위가 높다라는 것을 기억해주시면 됩니다.
위임생성자
public:
Student(const string& name_in)
: m_id(0), m_name(name_in)
{}
Student(const int& id_in, const string& name_in)
: m_id(id_in), m_name(name_in)
{}
위와같이 생성자가 생성자를 가져다 쓰는 것을 위임생성자라고 합니다.
public:
Student(const string& name_in)
//: m_id(0), m_name(name_in)
{
init(0, name_in);
}
Student(const int& id_in, const string& name_in)
//: m_id(id_in), m_name(name_in)
{
init(id_in, name_in);
}
void init(const int& id_in, const string& name_in)
{
m_id = id_in;
m_name = name_in;
}
이런식으로 분리하는 방법도 사용하기도 합니다. void init을 통해 만능적인 생성자를 만들어준 다음에 위에 student 각각에 넣어주는 방식으로 사용하는 것입니다.
초기화 함수를 별도로 만드는 이 방법은 코딩 스타일에 따라 다르겠지만 꽤 빈도있게 사용하는 방식이므로 기억을 해두시는 것을 추천드립니다.
반응형
'IT 프로그래밍 > 객체지향프로그래밍' 카테고리의 다른 글
[따배시 6.12] 동적 할당 배열 (0) | 2024.05.17 |
---|---|
[따배시 6.11] 메모리 동적할당 new 와 delete, 메모리누수 (0) | 2024.05.17 |
[8.3] 생성자 c++ (0) | 2024.05.15 |
[C++] 백준 4150번 피보나치 수 (0) | 2024.05.15 |
[C++] 캡슐화, 접근지정자, 접근 함수 (0) | 2024.05.14 |