클래스 객체 생성하면서 초기화 생성하고 초기화
조회수 305회
#include <iostream>
using namespace std;
class CTest
{
public:
CTest()
{
m_Value = 0;
}
CTest(const CTest& obj)
{
m_Value = 2;
}
int m_Value;
};
void main()
{
CTest t;
t.m_Value = 1;
CTest t1(t);
CTest t2 = t;
CTest t3; t3 = t;
cout << "t1: " << t1.m_Value << endl;
cout << "t2: " << t2.m_Value << endl;
cout << "t3: " << t3.m_Value << endl;
}
란 코드가 있는데요. 여기서 main 함수안에 CTest t;를 하게 되면 생성자를 호출해서 t.m_Value = 0;이 되고 t.m_Value에 1을 대입해서 t.m_Value는 1이 되고 아래에 복사생성자를 통해 t1이 그 멤버 데이터 값을 그대로 가져가게 되는것까진 이해가 되는데
t2와 t3의 차이가 생기는 이유가 제가 생각하기에는 객체가 생성될때 초기화를 하느냐 아니냐 의 차이로 보이는데, 좀 아리까리하네요. t2는 객체가 생성되면서 대입이 되는거라 복사생성자로 들어가는거고, t3는 객체가 생성되고 나서 대입되는거라 그냥 복사대입연산자로 처리가 되는건가요?
1 답변
-
CTest t1(t); CTest t1=t; CTest t1{t};
위의 3개는 같은 것입니다.
만약
CTest t1=t;
를 동작하지 않게 하고 싶다면, 아래와 같이 명시적으로explicit
키워드를 생성자 앞에 붙여주시면 됩니다.explicit CTest(const CTest& obj)
explicit
붙인후에 컴파일 해보세요. 그러면CTest t1=t;
에서 오류가 날 거에요.-
(•́ ✖ •̀)
알 수 없는 사용자
-
댓글 입력