c++ 생성자 관련 질문입니다.

조회수 459회
#include <iostream>

class A
{
    int x;

public:
    A(int c)
    {
        x = c;
        std::cout << "A(int c) is executed" << std::endl;
    }
    A(const A &a)
    {
        x = a.x;
        std::cout << "복사 생성" << std::endl;
    }
    void print_x()
    {
        std::cout << x << std::endl;
    }

};

int main()
{
    A a2 = 10; // 어떻게 이 문장이 클래스 A의 생성자 A(int c)를 출력하나요?
    std::cout << "---------" << std::endl;
    a2.print_x();

}

c++ 문법을 배우고 있는 중인데 궁금한 점이 생겨서 질문좀 부탁드립니다. 이 코드를 컴파일해서 실행시켜보면, 해당 코드에서 메인함수 첫번째 줄에 있는 A a2 = 10; 문장이 A의 생성자 A(int c)를 출력하는 것 같은데요... 어떻게 이게 가능한 건가요?

제가 배운바로는 생성자 A(int c)를 호출 할 수 있는 경우는

  • 명시적 방법에 의해
A a2 = A(10);
  • 암시적 방법에 의해
A a2(10);

이 두가지만 가능한 걸로 배웠는데 아닌가요? 답변 좀 부탁드립니다!!

1 답변

  • 좋아요

    1

    싫어요
    채택 취소하기

    c++에서 매개변수가 하나인 생성자를 "변환생성자" 라고합니다. A(int c) { x=c; } 라는 변환생성자를 만드셨습니다.

    그리고 A a2 = 10; 구문에서 컴파일러가 정의된 변환생성자에의해서

    A a2 = A(10) ; 로 컴파일러가 A클래스에 10이 매개변수로 주어진 임시객체를 만들어서 a2에 대입하는 구문으로 된다는겁니다.

    즉 , 변환생성자에 의해 매개변수의 자료형인 int형이 A클래스 형식으로 변환이 가능하다는 겁니다.

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

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

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

(ಠ_ಠ)
(ಠ‿ಠ)