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 답변
-
c++에서 매개변수가 하나인 생성자를 "변환생성자" 라고합니다.
A(int c) { x=c; }
라는 변환생성자를 만드셨습니다.그리고 A a2 = 10; 구문에서 컴파일러가 정의된 변환생성자에의해서
A a2 = A(10) ; 로 컴파일러가 A클래스에 10이 매개변수로 주어진 임시객체를 만들어서 a2에 대입하는 구문으로 된다는겁니다.
즉 , 변환생성자에 의해 매개변수의 자료형인 int형이 A클래스 형식으로 변환이 가능하다는 겁니다.
-
(•́ ✖ •̀)
알 수 없는 사용자
-
댓글 입력