728x90
반응형
멤버 이니셜라이저
멤버 이니셜라이저를 사용하면 객체가 아닌 멤버의 초기화가 가능하다.
class TestClass {
private:
int num1;
int num2;
public:
TestClass(int n1, int n2)
: num1(n1), num2(n2)
{
cout << "Member Initializer" << endl;
cout << "num1 : " << num1 << endl;
cout << "num2 : " << num2 << endl;
}
};
위 코드에서 : num(n) 이 멤버 이니셜라이저인데 생성자의 인자로 n1, n2 를 전달받으면
num1, num2 의 선언과 동시에 대입하겠다는 의미이다.
즉, 초기화를 하겠다는 의미이다.
멤버 이니셜라이저의 활용
멤버 이니셜라이저를 사용할 때 선언한 후 대입하는 것이 아니라
초기화를 진행하게 되기 때문에 const 멤버변수의 초기화도 가능하다.
class TestClass {
private:
const int num;
public:
TestClass(const int n)
: num(n)
{
cout << "Member Initializer" << endl;
cout << "num : " << num << endl;
}
};
따라서 다음과 같은 코드도 가능하다.
상수뿐만 아니라 참조자도 선언과 동시에 초기화가 이루어져야만 한다는 특성이 있다.
멤버 이니셜라이저를 사용하면 참조자도 멤버변수로 사용이 가능하다.
class TestClass {
private:
int& num;
public:
TestClass(int& n)
: num(n)
{
cout << "Member Initializer" << endl;
cout << "num : " << num << endl;
}
};
위와 같이 선언하게 되면 생성자로 받은 변수를 num 이라는 새로운 이름으로 선언한 것과 같은 의미이기 때문에
외부 변수를 객체 내부에서 수정하는 것도 가능하다.
#include <iostream>
using namespace std;
class TestClass {
private:
int& num;
public:
TestClass(int& n)
: num(n)
{
cout << "Member Initializer" << endl;
cout << "num : " << num << endl;
num++;
}
};
int main()
{
int n1 = 10;
TestClass test(n1);
cout << n1;
}
생성자에서 실행된 num++ 가 n1 에도 적용된 것을 확인할 수 있다.
*상수는 C++11부터 클래스 내부에서 선언과 동시에 초기화가 가능하지만 참조자는 반드시 이니셜라이저를 사용해야 한다.
728x90
반응형
'C++ > C++ 문법' 카테고리의 다른 글
[C++] this 포인터, 메서드 체이닝(Method Chaining), *this의 의미 (0) | 2024.04.29 |
---|---|
[C++] 객체 배열 (0) | 2024.04.29 |
[C++] 생성자와 소멸자, 생성자의 오버로딩, 디폴트 생성자, 객체의 동적할당 (0) | 2024.03.22 |
[C++] 객체의 전달 (const&) (0) | 2024.03.21 |
[C++] 클래스, 접근제어지시자(public, private), const 함수 (0) | 2024.03.21 |