가상 클래스 란 무엇입니까?
가상 클래스는 메모리에 한 번만 할당되는 클래스이므로 해당 클래스의 하위는 메모리에 설정된 해당 상위 클래스의 사본 하나만 사용합니다. 클래스는 공통된 특성이나 속성을 공유하는 객체 그룹입니다. 클래스를 가상으로 만들면 객체 지향 프로그래밍 언어에 2 세대 이상의 상위 클래스가 공통 조상 기본 클래스에서 파생 될 때 다중 상속을 사용할 수 있습니다. 참조 된 컴퓨터 프로그래밍 언어에 따라 클래스의 "가상"키워드, 유사한 키워드 또는 구문 및 의미는 특정 클래스가 가상으로 간주됨을 의미합니다.
모든 객체 지향 프로그래밍 언어가 다중 상속을 허용하는 것은 아니며, 이는 여러 개의 상위 클래스에서 동시에 하위 클래스를 파생시킬 수있는 경우입니다. C ++과 같은 프로그래밍 언어에서 클래스는 두 부모 클래스의 모든 멤버 데이터와 멤버 함수를 한 번에 상속하고 부모 데이터와 함수 세트에 모두 액세스 할 수 있습니다. 다중 상속을 지원하는 다른 언어로는 Perl, Python, Tcl 및 Eiffel이 있습니다.
자식 클래스를 만드는 데 사용 된 둘 이상의 부모 클래스가 원래 하나 또는 동일한 조부모 클래스에서만 파생 된 경우 다중 상속 계층 구조에서 문제가 발생합니다. 이것을 다이아몬드 문제라고하며,이 상황에서 계층 구조가 어떻게 보이는지에 따라 이름이 결정됩니다. 컴파일러 프로그램이 공통 조부모가있는 두 개의 상위 클래스로 작성된 손자 클래스와 같은 클래스를 인스턴스화하려고 시도하면 조부모의 사본 두 개가 각 부모마다 하나씩 메모리에 작성됩니다.
메모리에 동일한 조부모의 여러 사본으로 인한 모호성으로 인해 컴파일러는 조부모가 조부모 데이터 또는 함수에 액세스하는 데 사용해야하는 조부모의 사본을 확인할 수 없습니다. 이 상황을 해결하기 위해 C ++에서 조부모는 부모를 선언 할 때 가상 클래스로 만들어집니다. 이로 인해 컴파일러는 두 부모가 공유하는 메모리에 조부모 사본을 하나만 만듭니다. 조부모가 가상 클래스가되면 컴파일러는 조부모 사본이 하나뿐이므로 손자가 조부모에게 어떻게 액세스해야하는지 결정하는 데 아무런 문제가 없습니다.
클래스 계층 구조를 구성 할 때, 특히 미래에 훨씬 더 큰 계층에 포함되거나 기반이 될 때 특히주의해야합니다. 가상 클래스를 올바르게 사용하면 클래스 계층 구조가 개발에 더 큰 위도를 제공합니다. 그러나 위치를 찾기 어려운 오류를 일으킬 가능성이 있습니다. 견고한 컴퓨터 프로그래밍 엔지니어링 원칙에 대한 연구는 부적절한 프로그램 구성으로 인한 예기치 않은 부작용이 발생하지 않도록하는 데 도움이됩니다.