שעון עולמי --> c++ 가상함수 예제

c++ 가상함수 예제

השעה ב

세 개의 포인터 개체 *obj1, *obj2 및 *obj3을 만들었습니다. 이러한 포인터 개체를 사용하여 함수 my_features()를 호출하면 클래스의 해당 함수가 실행됩니다. 포유류 와 파충류 클래스의 개체를 중간 함수에 제공했는데, 그 대가로 obj2->my_features() 및 obj3->my_features()를 호출해야 합니다. 그러나 컴파일러가 세 가지 상황에서 기본 클래스 함수만 호출하는 모호한 상황 때문에 그런 일이 일어나지 않았습니다. 추상 클래스는 인터페이스를 정의하는 데 매우 유용합니다. 실제로 데이터가 없고 모든 함수가 순수 가상 함수인 클래스를 인터페이스라고 합니다. 가상 함수는 함수 호출을 수행하는 데 사용되는 식에 관계없이 개체에 대해 올바른 함수가 호출되도록 합니다. 코드에 간단한 기본 클래스 Employee가 있게하자, 클래스에는 raiseSalary(), 전송(), promote() 등과 같은 가상 함수가 포함되어 있습니다. 관리자, 엔지니어 등과 같은 다양한 유형의 직원은 기본 클래스 Employee에 존재하는 가상 함수를 자체적으로 구현할 수 있습니다. 전체 소프트웨어에서는 모든 곳의 직원 목록을 전달하고 직원의 유형을 알지 못하고 적절한 기능을 호출하기만 하면 됩니다. 예를 들어, 직원 목록을 반복하여 모든 직원의 급여를 쉽게 올릴 수 있습니다. 모든 유형의 직원은 클래스에 고유한 논리를 가질 수 있지만 특정 직원 유형에 대해 raiseSalary()가 존재하면 해당 함수만 호출되기 때문에 걱정할 필요가 없습니다.

다음 예제에서는 포인터를 통해 호출될 때 가상 함수와 비가상 함수가 어떻게 작동하는지 보여 주며, 가상 함수는 파생 클래스에서 재정의되는 기본 클래스의 멤버 함수입니다. 가상 함수가 있는 클래스를 다형성 클래스라고 합니다. 늦은 바인딩 함수 호출은 런타임 중에 해결됩니다. 따라서 컴파일러는 런타임시 개체 의 형식을 결정한 다음 함수 호출을 바인딩합니다. NameOf 함수가 Base에 대한 포인터를 통해 호출되는지 또는 Derived에 대한 포인터를 호출하는지 여부에 관계없이 Derived에 대한 함수를 호출합니다. NameOf은 가상 함수이고 pBase 및 pDerived 모두 파생 형식의 개체에 대한 파생 함수를 호출합니다. 실제로 원래 myCode() 함수에 다른 블록이 있는 경우(자동차 나 트럭이 아닌 다른 것에 대해 `foo-bar` 작업을 수행하는 "foo-bar" 작업을 수행하는 세미 제네릭 코드는 위의 참조), 차량의 fooBar()를 순수 가상에서 일반 가상으로 변경하고 코드를 해당 멤버 함수: 많은 클래스가 기본 클래스로 사용되도록 설계되지 않았기 때문입니다. 예를 들어 클래스 복합을 참조하십시오. 반면 가상 멤버 함수는 런타임에 동적으로 해결됩니다. 즉, 멤버 함수는 해당 개체에 대한 포인터/참조 유형이 아니라 개체 의 형식에 따라 동적으로(런타임) 선택됩니다. 이를 "동적 바인딩"이라고 합니다. 대부분의 컴파일러는 다음 기술의 일부 변형을 사용합니다: 개체에 하나 이상의 가상 함수가 있는 경우 컴파일러는 "가상 포인터" 또는 "v-포인터"라는 개체에 숨겨진 포인터를 넣습니다.

이 v-포인터는 "가상 테이블" 또는 "v-table"이라는 전역 테이블을 가리킵니다. 간단한 사례부터 살펴보겠습니다. 비가상 함수를 호출할 때 컴파일러는 가상 함수 메커니즘을 사용하지 않습니다. 대신 멤버 함수의 정규화된 이름을 사용하여 함수를 이름으로 호출합니다. 예를 들어, 다음 C ++ 코드… 가상 함수에 대한 호출은 호출되는 개체의 기본 유형에 따라 해결됩니다. 참고: 파생 클래스의 fun_4(int)는 두 함수의 프로토타입이 다르기 때문에 기본 클래스의 fun_4(fun_4)와 는 다릅니다.

סימול מדינה סימול איזור איזור זמן שעון חורף\קיץ
שעון חורף
טפסים ביטוח לאומי,מס הכנסה