Minwoo Dev.
[C++] 멤버 이니셜라이저(Member Initializer) 본문
x와 y 에 대한 점을 나타내는 Myclass라는 클래스가 있다고 하자.
보통 생성자를 통하여 값을 전달받아 사용하는 방식으로 코드를 작성하면 아래와 같을 것이다.
#include <iostream>
using namespace std;
class Myclass
{
private:
int x;
int y;
public:
Myclass(int xpos, int ypos)
{
x = xpos;
y = ypos;
}
void ShowPoint() const
{
cout << x << ", " << y << endl;
}
};
int main(void)
{
Myclass mypo1(3, 7);
mypo1.ShowPoint();
return 0;
}
위 코드에서 생성자 부분을 따로 잘라서 설명하겠다.
Myclass(int xpos, int ypos)
{
x = xpos;
y = ypos;
}
위처럼 코드를 작성하면, main 함수에서
Myclass mypo1(3, 7);
위처럼 선언했을 때, xpos에는 3이, ypos에는 7이라는 값이 call-by-value로 전달된다.
그 값을 복사하여 x 에 xpos를, y 에 ypos 를 대입하는 것이다.
실행 결과
위처럼 클래스의 생성자에 초기화를 하는 경우에 , 멤버 이니셜라이저를 사용할 수 있다.
멤버 이니셜라이저(Member Initializer)
Myclass(int xpos, int ypos) : x(xpos), y(ypos)
{
// 공백
}
멤버 이니셜라이저는 생성자의 초기화를 위처럼 하는 방식이다.
":"를 사용하여 클래스 내부변수인 x에는 xpos를, y에는 ypos를 전달한다는 의미이다.
멤버 이니셜라이저를 사용하면 멤버함수 내부는 공백으로 남는 경우가 많다.
실행 결과
결과도 같은 것을 확인할 수 있다.
위 코드만 본다면 멤버 이니셜라이저를 굳이 사용해야 할 이유를 못느낄수도 있다.
나도 이까지만 봤을 때는 그저 생성자를 초기화하는 또 하나의 방법이라고 생각했으니 말이다.
멤버 이니셜라이저(Member Initializer)로 const 상수 초기화하기
멤버 이니셜라이저의 좋은 점은 const 상수도 초기화할 수 있다는 점이다.
- 멤어 이니셜라이저를 사용하지 않고 const 상수 초기화
만약, 멤버 이니셜라이저를 사용하지 않고 const 상수를 초기화한다면 ,
#include <iostream>
using namespace std;
class Myclass
{
private:
const int x; // const로 선언하였다.
const int y; // const로 선언하였다.
public:
Myclass(int xpos, int ypos) // 멤버 이니셜라이저 사용 X
{
x = xpos;
y = ypos; // 함수 내부에서 초기화 하는 모습임
}
void ShowPoint() const
{
cout << x << ", " << y << endl;
}
};
int main(void)
{
Myclass mypo1(3, 7);
mypo1.ShowPoint();
return 0;
}
이러한 에러가 발생할 것이다.
- 멤버 이니셜라이저 사용하여 const 상수 초기화
하지만, 멤버 이니셜라이저를 사용한다면
#include <iostream>
using namespace std;
class Myclass
{
private:
const int x;
const int y;
public:
Myclass(int xpos, int ypos) : x(xpos), y(ypos) // 멤버 이니셜라이저 사용
{
// 공백
}
void ShowPoint() const
{
cout << x << ", " << y << endl;
}
};
int main(void)
{
Myclass mypo1(3, 7);
mypo1.ShowPoint();
return 0;
}
에러가 발생하지 않고 초기화가 정상적으로 진행되었다.
이처럼 멤버 이니셜라이저는 const 변수를 초기화할 때 유용하게 사용된다.
'C++' 카테고리의 다른 글
[C++] 디폴트 생성자(Default Constructor) (1) | 2024.03.17 |
---|---|
[C++] 생성자(Constructor) (0) | 2024.03.17 |
[C++] 윤성우의 열혈 C++ 프로그래밍 Ch05-1 : 복사 생성자의 정의 문제풀이 (0) | 2024.03.16 |
[C++] new , delete (0) | 2024.03.10 |
[C++] const 참조자, const 참조자를 사용한 Call-by-reference (0) | 2024.03.10 |