클래스 객체 생성하면서 초기화 생성하고 초기화

조회수 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;에서 오류가 날 거에요.

    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)