비교 차트
비교의 근거 | 단일 상속 | 다중 상속 |
---|---|---|
기본 | 파생 클래스는 단일 기본 클래스를 상속합니다. | 파생 클래스는 두 개 또는 두 개 이상의 기본 클래스를 상속합니다. |
이행 | 클래스 derived_class : access_specifier 기본 클래스 | 클래스 파생 _class : access_specifier base_class1, access_specifier base_class2, .... |
접속하다 | 파생 클래스는 단일 기본 클래스의 기능에 액세스합니다. | 파생 클래스는 상속 된 기본 클래스의 결합 된 기능에 액세스합니다. |
시계 | 공개, 비공개, 보호 | 공개, 비공개, 보호 |
실행 시간 | 머리 위로 적은 양의 실행 시간 필요 | 단일 상속에 비해 런타임 오버 헤드가 추가적으로 필요합니다. |
단일 상속의 정의
단일 상속에는 단일 기본 클래스와 단일 파생 클래스가 있습니다. 파생 클래스는 공개, 보호 및 비공개로 기본 클래스를 상속합니다. 기본 클래스의 멤버는 기본 클래스를 상속하는 동안 지정된 액세스 지정자에 따라 파생 클래스에서 액세스 할 수 있습니다.
"계급 클래스"와 "계좌 클래스 저장"이라는 두 가지 클래스가있는 실례를 들어 보겠습니다. 여기서 "계정 클래스 저장"은 "계정 클래스"의 기능을 상속 할 수 있으므로 "계정 클래스"클래스는 계정 클래스 저장을위한 기본 / 수퍼 / 부모 클래스가되고 "계정 클래스 저장"은 파생 클래스가됩니다.
여기서 "계정 클래스의"속성은 acc_no (개인) 및 balance (공용)이며 구성원 함수는 public 인 initialize (), get_accno ()입니다. 이제 "계정 클래스"는 "계정 클래스 저장"에 공개적으로 상속되므로 "계정 클래스 저장"을 통해 "계정 클래스"의 모든 공용 멤버에 직접 액세스 할 수 있습니다. "계정 클래스"의 공용 멤버 함수를 통해 "계정 클래스"의 개인 멤버에 액세스 할 수 있지만 직접 액세스 할 수는 없습니다.
단일 상속의 구현 :
# 네임 스페이스 표준을 사용합니다. class Account {int acc_no, ; public : 유동 균형; 무효의 초기화 (int x, int y) {acc_no = x; 균형 = y; } int get_accno. () {return acc_no; }}; Saving_acc 클래스 : public Account {float intrest_rate; public : // Saving_acc 클래스의 생성자 Saving_acc (int c) {interest_rate = c; } void display () {cout <다중 상속의 정의
다중 상속은 파생 클래스가 둘 이상의 기본 클래스의 결합 된 특성을 상속 할 수있게합니다. 즉 단일 파생 클래스와 여러 기본 클래스가 있습니다. 모든 기본 클래스는 각각에 대한 별도의 액세스 지정자를 언급함으로써 상속되어야합니다. 파생 클래스는 기본 클래스가 상속되는 액세스 지정자를 기반으로 기본 클래스의 멤버에 액세스 할 수 있습니다.
예를 들어 Bike, Car 및 Vehicle이라는 세 가지 클래스를 사용하면 더 쉽게 만들 수 있습니다. 이제 "Vehicle"은 "Car"뿐만 아니라 "Bike"의 기능을 상속받을 수 있습니다. 따라서 "Vehicle"은 파생 클래스가되고 "Bike"와 "Car"가 기본 클래스가됩니다. 이제 "Bike"와 "Car"는 "Vehicle"에 의해 공개적으로 상속되며 "Bike"와 "Car"의 모든 공용 멤버에 액세스 할 수 있지만 "Car"에서는 Model_no라는 엔터티가 보호되므로 Car에만 개인이 될 수 있지만 "차량"이 접근합니다.
다중 상속의 구현 :
# 네임 스페이스 표준을 사용하여 포함; class Bike {int engine_cost; ; public : void set_engine_cost (int x) {engine_cost = x; }}; 클래스 자동차 {보호 : int Model_no; public : void set_Model_no (int p) {Model_no = p; }}; class Vehical : public 자전거, 공용 자동차 {int no_of_wheels public : vehical (int w) {no_of_wheels = w; cout << "바퀴가 없다"< "단일 및 다중 상속 간의 주요 차이점
- 단일 상속은 단일 기본 클래스를 갖는 하나의 파생 클래스이지만 다중 상속에서는 2 개 또는 2 개 이상의 기본 클래스를 가지지 만 단일 파생 클래스는 있습니다.
- 하나의 파생 클래스가 두 개 이상의 기본 클래스를 상속하므로 다중 상속은 매우 혼란 스럽습니다. 기본 클래스가 파생 클래스에 대해 동일한 이름을 갖는 속성 또는 함수를 갖는 경우 파생되어야하는 기본 클래스의 특성 또는 함수를 식별하는 것이 어려워집니다.
- 오버 헤드 문제는 단일 상속의 경우 더 적습니다. 그러나 다중 상속의 경우 객체 생성이나 파기는 오버 헤드를 증가시키는 클래스 계층에서 부모 클래스의 생성자와 소멸자를 호출합니다.
- 단일 상속은 전문화쪽으로 나아갑니다. 반면 다중 상속은 일반화쪽으로 나아 간다.
- 단일 상속은 오버 헤드가 적기 때문에 다중 상속에 비해 런타임이 짧습니다.
결론
상속은 하나의 클래스가 이미 형성되어있는 것처럼 프로그래머의 작업을 쉽게 만듭니다. 필요한 경우 다른 클래스에 적용 할 수 있습니다. 액세스 지정자는 기본 클래스의 멤버에 대한 액세스를 특정 방식으로 제한하지만 데이터를보다 안전하게 만듭니다. 단일 상속은 다중 상속보다 더 쉽고 구현하기 쉽습니다. 상속은 객체 코드의 크기를 줄이지 만 프로그램의 실행 시간에도 영향을줍니다.