C ++의 상속에 대해 알아야 할 모든 것



이 기사에서는 C ++의 상속, 다양한 유형 및 구현 방법에 대한 상세하고 포괄적 인 지식을 제공합니다.

C ++는 객체 지향 언어입니다. 데이터 추상화, 다형성, 캡슐화 및 상속은 OOP의 초석입니다. 이 게시물에서는 상속이 무엇인지 이해할 것입니다. C ++의 상속 유형 및 처음부터 이와 관련된 모든 필수 개념. 결국 우리는이 강력한 개념의 단점을 살펴보고 해결하려고 노력할 것입니다.

C ++의 상속이란?

상속은 C ++ 또는 다른 객체 지향 언어에서 가장 강력하고 널리 사용되는 개념 중 하나입니다. 이 개념을 이해하려면 클래스와 객체에 대한 약간의 지식이 필요합니다. 상속을 사용하여 일반적인 메서드와 속성으로 구성된 클래스를 만들 수 있습니다. 이 클래스는보다 구체적인 메서드를 포함하는 다른 클래스에 상속 될 수 있습니다.





C ++의 상속

이렇게하면 동일한 기능을 반복해서 작성할 필요가 없으므로 시간이 절약되고 코드의 가독성이 높아집니다.



통사론:

클래스 파생 클래스 : access_type base_class {// 클래스 본문}

기본 클래스 : 코드 가독성을 높이기 위해 다른 클래스에서 공유 할 수있는 모든 일반 메서드와 속성으로 구성된 클래스를 기본 클래스라고합니다.

파생 클래스 : 보다 구체적인 메서드로 구성되고 클래스를 상속하는 클래스를 파생 클래스라고합니다. 파생 클래스는 다른 파생 클래스의 기본 클래스가 될 수도 있습니다.



몇 가지 속성과 메서드를 사용하여 클래스 XYZ를 만드는 경우. 이제 학급 학생은 몇 가지 다른 속성을 갖게되지만 XYZ 클래스의 요소도 포함되며 교수진도 마찬가지입니다. 다이어그램을 보겠습니다.

따라서 학생 및 교수진은 XYZ에서 상속됩니다.

액세스 지정자 클래스가 다른 클래스를 상속하는 방법을 이해했습니다. 그러나 어떤 사람들은 기본 클래스 또는 부모 클래스의 모든 속성과 메서드가 자식 클래스 또는 파생 클래스와 공유되므로 안전하지 않은 메서드라고 말할 수 있습니다. 예를 들어 'Bank'클래스가 'customers'및 'investors'클래스에 상속 된 경우입니다. 'vaultpassword'와 같은 클래스 'Bank'의 속성, 기타 고객 관련 정보 및 개인 데이터는 안전하지 않은 'customers'및 'investors'클래스와 공유됩니다.

위의 문제를 해결하기 위해 C ++는 액세스 지정자를 사용하여 파생 클래스에 대한 기본 클래스 특성의 액세스를 제한합니다. C ++에는 총 3 가지 유형의 액세스 지정자가 있습니다.

  1. 공공의
  2. 은밀한
  3. 보호

아래 표는 다른 액세스 지정자에 따라 파생 클래스에서 액세스 할 수있는 데이터 유형을 잘 이해할 수 있도록합니다.

액세스 지정자 공공 데이터 개인 데이터 보호 된 데이터
은밀한 상속되지 않음상속되지 않음상속되지 않음
보호 보호 은밀한 보호
공공의 공공의 은밀한 보호

단일 상속

단일 상속은 단순한 바닐라 형태의 상속으로 간주 할 수 있습니다. 단일 상속에서 단일 클래스는 기본 클래스에서 상속됩니다.

#include using namespace std class Train {int Numberofwheels int Numberofcoaches public : void Traininfo (int n, int m) {Numberofwheels = n Numberofcoaches = m} void showinfo () {cout<이 상속 사례를 다단계 상속이라고합니다. 첫 번째 클래스와 마지막 클래스 사이의 클래스를 중간 기본 클래스라고도합니다.마지막 클래스가 첫 번째 클래스의 멤버를 상속받을 수 있다고 생각하십니까? 예, 그럴 수 있습니다

피보나치 C ++ 재귀
#include using namespace std class First {protected : int a public : void getinfofirst (int x) {a = x} void showinfofirst () {std :: cout<< 'Value of a = ' < 

산출:

a = 10의 값

b = 20의 값

c의 값 = 30

d의 값 = 50

계층 적 상속

특정 문제는 단일 또는 다중 수준 상속의 도움으로 해결할 수 없습니다. 계층 적 상속에서 둘 이상의 클래스가 단일 기본 클래스에서 상속됩니다.

#include using namespace std class College {public : College () {cout<< 'We are in class College' << endl } } class Student: public College { } class Faculty: public College { } int main() { Student student Faculty faculty return 0 }

산출:

우리는 대학에 있습니다

우리는 대학에 있습니다

자바에서 교착 상태를 방지하는 방법

C ++의 다중 상속

계층 적 상속에서 하나의 기본 클래스에 둘 이상의 파생 클래스가있는 것을 보았습니다. 다중 상속에서 하나의 파생 클래스에는 둘 이상의 기본 클래스가 있습니다.

#include using namespace std class One {protected : int a public : void getinfoOne (int x) {a = x}} class Two {protected : int b public : void getinfoTwo (int y) {b = y}} class Main : public One, public Two {public : void Display () {std :: cout<< 'Value of a = ' < 이 시점에서 우리는 C ++에서 사용되는 모든 유형의 상속에 대해 잘 알고 있습니다. 그러나 두 가지 유형의 상속을 사용하려면 어떻게해야합니까? 가능할까요? 예, 하이브리드 상속의 도움으로 가능합니다. 하이브리드 상속에서는 두 가지 유형의 상속을 결합합니다. 예 : 다단계 및 다중 상속, 계층 및 다중 상속 등

#include using namespace std class World {protected : int a public : void getinfoWorld (int x) {a = x}} class Continent : public World {protected : int b public : void getinfoContinent (int y) {b = y}} class Country {protected : int d public : void getinfoCountry (int m) {d = m}} class Australia : public Continent, public Country {public : void Display () {std :: cout<< 'Value of a = ' < 

다이아몬드 문제를 이해하는 데 도움이 될 위의 다이어그램을 이해합시다. 클래스 B와 클래스 C는 클래스 A에서 상속하므로 클래스 A와 클래스 B는 모두 클래스 A의 속성과 메서드를 갖습니다. 클래스 D가 클래스 B와 클래스 C에서 상속하는 경우 클래스 D는 클래스 B와 클래스 C의 모든 속성을 갖습니다. . 또한 클래스 B와 클래스 C에서 상속 된 클래스 A의 모든 속성을 갖습니다. 따라서 클래스 D의 객체를 만들고 클래스 A의 메서드를 호출하면 모호한 상황이 생성되고 컴파일러가 어디에서 혼란스러워 질 것입니다. 클래스 B 또는 클래스 D에서 A의 클래스 메소드 여야합니다.

이 모호성을 해결하기 위해 가상 기본 클래스라는 개념을 사용합니다. 기본 클래스를 가상 기본 클래스로 만들면 가상 기본 클래스와 파생 클래스 사이의 기존 경로 수에 관계없이 해당 클래스의 복사본 하나만 상속됩니다.

클래스 A {} 클래스 B : 가상 공개 A {} 클래스 C : 가상 공개 A {} 클래스 D : 공개 C, 공개 D {}

이것으로 C ++의 상속 기사를 마칩니다. 자세한 내용은 다음을 확인하십시오. 신뢰할 수있는 온라인 학습 회사 인 Edureka에서 제공합니다. Edureka의 Java J2EE 및 SOA 교육 및 인증 과정은 Hibernate & Spring과 같은 다양한 Java 프레임 워크와 함께 핵심 및 고급 Java 개념 모두에 대해 교육하도록 설계되었습니다.

질문이 있으십니까? 이 블로그의 댓글 섹션에 언급 해 주시면 가능한 한 빨리 답변을 드리겠습니다.