생성자 다중 정의
클래스 생성자는 다중정의가 된다.
class MyData
{
public:
MyData(int nParam): nData(nParam){}
MyData(int x, int y): nData(x + y){}
void printData() {
std::cout << nData << std::endl;
}
int getData() {
return nData;
}
private:
int nData = 0;
};
생성자 위임
다중 정의된 생성자를 함께 엮어서 호출하는 것 또한 가능하다.
이를 생성자 위임이라고 한다.
class MyPoint
{
public:
MyPoint(int x)
{
if (x > 100)
x = 100;
this->x = x;
}
MyPoint(int x, int y): MyPoint(x) {
if (y > 200)
y = 200;
this->y = y;
}
void printCoord() {
std::cout << x << std::endl;
std::cout << y << std::endl;
}
private:
int x = 0;
int y = 0;
};
만약 위의 클래스가 MyPoint(10, 20)로 호출이 된다면
MyPoint(x) -> MyPoint(x, y) 순으로 실행되며, x와 y의 초기화가 모두 이루어지게 된다.
이를 콜스택 관점에서 보면 아래와 같다.
먼저 main() 함수에서 MyPoint 클래스 인스턴스를 생성해보자.
int main()
{
MyPoint mp(10, 20);
return 0;
}
디버그 모드에서 확인해보면 main(), MyPoint(x, y), MyPoint(x) 순으로 호출되는 것을 알 수 있다.
'C, C++' 카테고리의 다른 글
C++) 복사 생성자 (1) | 2024.01.24 |
---|---|
C++) 정적 멤버 static (0) | 2024.01.24 |
C++) 디폴트 생성자와 카피 생성자(참조자 멤버 초기화) (0) | 2024.01.22 |
C++) 디폴트 생성자(Constructor)와 소멸자 (0) | 2024.01.21 |
C++) 클래스 기본 문법 (0) | 2024.01.21 |