생성자의 멤버들을 초기화
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;
}
'개발 소발 > 개발 C++(기초)' 카테고리의 다른 글
c++ 클래스와 const (0) | 2019.08.08 |
---|---|
c++ 소멸자 Destructor, this포인터,연쇄호출chaining member functions (0) | 2019.08.05 |
c++ 생성자 Constructor (0) | 2019.08.05 |
c++ 캡슐화,접근지정자,접근함수 (0) | 2019.08.05 |
c++ OOP 객체지향 프로그래밍 (0) | 2019.08.02 |