비디오: 다형성의 모든 것(All about polymorphism) 2024
펜스 스 트래 들러로서 C ++은 초기 바인딩과 후기 바인딩을 모두 지원합니다. 모든 주어진 프로그래밍 언어는 개발자의 변덕을 기반으로 초기 또는 후기 바인딩을 지원할 수 있습니다. C와 같은 오래된 언어는 초기 바인딩 만 지원하는 경향이 있습니다. Java 및 C #과 같은 최근 언어는 후기 바인딩 만 지원합니다.
C ++의 기본값이 초기 바인딩이라는 사실에 놀랄 수 있습니다. OverloadOverride 프로그램의 출력은 다음과 같습니다:
약간 날짜가 지나면 이유는 간단합니다. 첫째, C ++은 이전 버전과의 호환성을 유지하기 위해 가능한 한 C와 최대한 비슷하게 행동해야합니다. 둘째, 다형성은 호출을 수행하는 데 필요한 데이터 저장 및 코드 측면에서 모든 함수 호출에 작은 양의 오버 헤드를 추가합니다. C ++의 창립자는 시스템의 선택 언어로 C ++을 채택하지 않는 이유로 추가 오버 헤드가 사용되므로 초기 바인딩을보다 효율적으로 만들 것을 염려했습니다.-
멤버 함수를 다형성으로 만들려면 프로그래머는 C ++ 키워드
virtual,로 플래그를 지정해야합니다. OverloadOveride < program: class Student {public: virtual void calcTuition () {cout << "우리는 학생입니다: calcTuition"<< endl;}}; CalcTuition ()이 다형성 멤버 함수임을 C ++에 알리는 키워드 virtual
. 즉, calcTuition ()을 가상으로 선언하면 calcTuition ()이 호출되는 객체의 런타임 유형에 대해 의심이있을 경우 호출이 늦게 바인딩됩니다.
- We 're in Student:: calcTuition We 're GraduateStudent:: calcTuition Press 계속 진행하려면 Enter 키를 누릅니다.
C ++ 환경과 함께 제공되는 디버거가 마음에 들면이 예제를 통해 실제로 단계별로 수행해야합니다. fn ()이 처음 호출 될 때 Student:: calcTuition ()으로 프로그램을 한 번 보았지만 두 번째 호출에서는 GraduateStudent:: calcTuition ()을 사용하는 것이 매우 멋지다. 시도 할 때까지 다형성을 진정으로 인식 할 수 없습니다.