가상 클래스

Virtual class

객체 지향 프로그래밍에서 가상 기반 클래스는 외부 클래스의 [1]하위 클래스에 의해 함수 및 멤버 변수를 재정의하고 재정의할 수 있는 중첩된 내부 클래스입니다.가상 클래스는 가상 기능과 유사합니다.

가상 클래스의 실행 시간 유형은 외부 클래스의 개체 실행 시간 유형에 따라 달라집니다.(오브젝트의 런타임타입이 사용하는 가상 함수를 결정하는 것과 같습니다).

외부 클래스 객체의 런타임 인스턴스 유형은 자체 유형 객체의 다형성 유형뿐만 아니라 가상 클래스 멤버의 패밀리 트리 전체에서도 결정된다.

목적

가상 클래스는 새로운 기능과 표현으로 데이터 추상화를 확장하는 확장성 문제를 해결합니다.가상 클래스는 가상 기능과 마찬가지로 동일한 정의, 재정의 및 [2]참조 규칙을 따릅니다.

파생 클래스는 기본 클래스에서 상속하는 경우 기본 클래스에서 상속하는 가상 내부 클래스를 정의하거나 재정의해야 합니다.자녀 클래스의 객체는 부모 클래스 유형 또는 자녀 클래스 유형의 참조 또는 포인터로 참조할 수 있습니다.참조 또는 포인터가 가상 내부 클래스를 호출할 때 개체가 파생 클래스 유형일 경우 파생 클래스의 구현이 호출됩니다.외부 클래스의 유형에 따라 내부 가상 클래스의 실행 시간이 결정됩니다.

object 인수가 있는 메서드는 객체의 가상 클래스에 액세스할 수 있습니다.메서드는 인수의 가상 클래스를 사용하여 인스턴스를 만들고 변수를 선언할 수 있습니다.서로 다른 인스턴스의 가상 클래스가 호환되지 않습니다.

예를 들어 기본 클래스Machine가상 클래스를 가질 수 있습니다.Parts. 서브클래스Car실장하다Parts서브클래스와는 다르게Bicycle단, 프로그래머는 가상 내부 클래스의 모든 메서드를 호출할 수 있습니다.Parts어떤 계급이든Machineobject, 및 취득할 수 있습니다.Parts특정 파생 클래스의 구현.

#실패하다 <iostream>  학급 기계. { 일반의:     무효 달려.() { }      학급 부품. {     일반의:         가상 인트 get_filength(가져오기)() = 0;                  가상 표준::스트링 get_fuel_type() = 0;     }; };  // 클래스 "Machine"의 내부 클래스 "Parts"는 기계가 가지고 있는 휠 수를 반환할 수 있습니다. 학급 : 기계. { 일반의:     무효 달려.() {          표준::외치다 << > "차가 달리고 있어요." << > 표준::;      }          학급 부품.: 기계.::부품. {     일반의:         인트 get_filength(가져오기)() 덮어쓰다 {             표준::외치다 << > "자동차는 바퀴가 4개입니다." << > 표준::;             돌아가다 4;         }                  표준::스트링 get_fuel_type() 덮어쓰다 {             표준::외치다 << > "자동차는 연료로 휘발유를 사용합니다." << > 표준::;             돌아가다 "실패";         }     }; }; 

클래스 유형의 임의의 객체Machine에도 같은 방법으로 액세스 할 수 있습니다.프로그래머는 (콜을 통해) 휠 수를 요구할 수 있습니다.get_Wheels()어떤 종류의 기계인지, 몇 개의 바퀴가 있는지, 가능한 모든 종류의 기계가 있는지 알 필요가 없습니다.다음과 같은 기능get_Fuel_Type()가상 클래스에 추가할 수 있습니다.Parts파생계급으로Car.

「 」를 참조해 주세요.

레퍼런스

  1. ^ "Virtual Classes". CaesarJ Programming Guide. Technische Universität Darmstadt. 2006-02-10. Retrieved 2007-07-30.
  2. ^ "Overview of Virtual Classes" (PDF). A Virtual Class Calculus. University of Aarhus, Denmark. 2006. Retrieved 2014-04-30.

외부 링크

  • Altherr, Philippe; Cremet, Vincent (2005). "Inner Classes and Virtual Types" (PDF). Ecole Polytechnique Fédérale de Lausanne (EPFL) Switzerland. Retrieved 2014-04-30.
  • Ernst, Erik; Ostermann, Klaus; Cook, William R. (2006). "A Virtual Class Calculus" (PDF). University of Aarhus. Retrieved 2007-07-30.