나는 ClothingStore라는 클래스가 있다고 가정 해 보겠습니다. 이 클래스에는 3 개의 멤버 함수가 있으며, 이는 상점의 올바른 부서 방문자를 가리 킵니다. 멤버 함수는 ChildrenDept, MenDept 및 WomenDept이며 방문자가 자식인지, 남성인지, 여성인지에 따라 다릅니다.함수 오버로드가 런타임에 어떻게 작동하며 오버로드되는 이유는 무엇입니까?
함수 오버로드를 사용하면 PointToDept와 같은 이름을 가진 3 개의 함수를 만들 수 있지만 입력 인수 (자식, 남성, 여성)를 다르게 지정할 수 있습니다.
실제로 프로그램이 실행될 때 런타임에 어떤 일이 발생합니까?
내 생각에 컴파일러는 프로그램에 switch 문을 추가하여 올바른 멤버 함수를 선택합니다. 그러나 그것은 저에게 궁금합니다. - switch 문으로 자신 만의 함수를 만드는 대신 오버로드 된 함수를 사용할 때 프로그램 성능 측면에서 어떤 이점이 있습니까? 다시 말하면, 그 부분에 대한 유일한 결론은 코드 가독성입니다. 고맙습니다.
컴파일러는 그들이 다른 이름이되었다 세 가지 기능 만있는 것처럼 본다. 어떤 함수를 호출 할지는 각 호출 사이트에서 인수의 유형과 매개 변수의 유형과 "패턴 일치"를 (컴파일러가) 조사한 것입니다. switch 문은 없습니다. 이 호출은 매개 변수가 일치하는 고유 함수에 대한 호출입니다. 컴파일러에서 일치 항목을 찾을 수 없으면 (오버로드 확인에 대한 C++ 규칙이 충족되지 않았기 때문에) 컴파일 타임 오류 메시지가 나타납니다. – Gene
http : // ko를 참조하십시오.wikipedia.org/wiki/Ad_hoc_polymorphism#Early_binding –
"왜 오버로드 되나요?" - 제공하는 데이터 유형이 변경 되더라도 오버로드 된 함수에 대한 호출을 변경할 필요가없는 클라이언트 코드를 작성할 수 있기 때문입니다. 이는 일반적인 클라이언트 코드에 편리합니다. 개발 또는 유지 관리 프로그래밍 중에 다른 유형을 사용하도록 발전하는 경우에 대비하여 클라이언트가 질문자 유형에서 호출자로부터 받아 들일 수있는 템플릿을 말할 때 매우 중요합니다. 템플릿에서 호출 할 수있는 경우 동일한 소스 코드를 사용하는 오버로드 된 함수, 다형성 (오버로드)의 한 형태는 다른 (템플릿)을 깨끗하게 지원합니다. –