c++ 문법 질문
조회수 714회
안녕하세요, 다음 코드가 동작하는 매커니즘이나 문법이 뭘까요? testFunc() 함수는 D 오브젝트를 인자로 받는데, C 오브젝트 포인터를 넣어주어도 동작을 합니다.
#include <iostream>
class C
{
public:
C (){}
};
struct D
{
protected:
C *node_{nullptr};
public:
D() = default;
D(C *c) { node_ = c;};
};
void testFunc(D input){
std::cout << "Hello, World!" << std::endl;
}
int main() {
C* c = new C();
testFunc(c);
return 0;
}
-
(•́ ✖ •̀)
알 수 없는 사용자
1 답변
-
D
클래스는D::D(C*)
라는 생성자를 갖기에,C*
를 입력 받는D
인스턴스가 생성되어 해당 함수가 호출됩니다.이 생성자를 통해 아래와 같은 코드가 허용됩니다.
D d = new C;
마치 다른 타입으로 변환하는 것처럼 보이기에 이러한 생성자를 변환 생성자라고 부릅니다.
이러한 암시적 생성을 막기 위해서는
explicit
을 사용합니다.explicit D(C *c) { node_ = c;}
댓글 입력