C++의 상속 유형 무엇을 알아야 합니까?

게시 됨: 2023-04-05

인기 있는 소프트웨어 시스템이 어떻게 구축되는지 궁금한 적이 있습니까? 객체 지향 프로그래밍(OOP)의 상속이라는 강력한 메커니즘 덕분입니다. 상속을 통해 프로그래머는 기존 클래스를 기반으로 새로운 클래스를 생성할 수 있으므로 코드 재사용 및 효율적인 소프트웨어 개발이 가능합니다. 여러 클래스가 필요한 시스템을 구축한다고 상상해 보십시오. 각 클래스는 몇 가지 공통 속성과 동작을 공유합니다.

동일한 코드를 반복해서 작성하는 대신 상속을 사용하여 기본 클래스를 만들고 이 클래스에서 새 클래스를 파생시켜 시간과 노력을 절약할 수 있습니다.

상속은 효율적일 뿐만 아니라 다재다능합니다. C++에는 각각 고유한 이점과 사용 사례가 있는 여러 유형의 상속이 있습니다.

이 기사에서는 C++의 다양한 유형의 상속을 전체적으로 살펴보고 기사 전반에 걸쳐 관련 코드, 설명 및 실제 예제를 제공합니다.

목차

C++의 다양한 상속 유형

C++ 프로그래밍 언어는 프로그래머에게 다섯 가지 종류의 상속 옵션을 제공합니다. 컨텍스트와 요구 사항에 따라 개발자와 프로그래머는 이러한 상속 유형 중 하나로 작업할 수 있습니다.

단일 상속

단일 상속은 C++에서 가장 일반적인 상속 유형입니다. 단일 상속에서 파생 클래스는 단일 기본 클래스에서 상속됩니다. 즉, 클래스는 자체 데이터 멤버와 멤버 함수를 추가할 수 있는 기능을 가지면서 기본 클래스의 모든 공개 및 보호 데이터 멤버와 멤버 함수를 상속합니다.

단일 상속의 구문과 이해를 얻으려면 아래 코드 스니펫을 확인하십시오.

// 기본 클래스

클래스 동물 {

공공의:

무효 먹다() {

std::cout << "동물이 먹고 있다" << std::endl;

}

};

// 파생 클래스

개 클래스 : 공개 동물 {

공공의:

무효 껍질() {

std::cout << "개가 짖는다" << std::endl;

}

};

이 예제에는 단일 멤버 함수 eat()이 있는 Animal이라는 기본 클래스가 있습니다 . 그런 다음Animal 에서 공개적으로 상속되는 파생 클래스 Dog 를정의합니다 .Dog는 또한 자신만의 멤버 함수인 bark()를 가지고 있습니다.단일 상속을 사용하여Dog는 Animal 클래스eat() 함수에액세스 하고 자신의 동작을bark() 함수로 추가할 수 있습니다.

C++에서 단일 상속을 사용하는 경우

프로그래머는 단일 상속을 사용하여 기본 클래스에 기능을 추가하는 파생 클래스를 만들 수 있습니다.

예를 들어 전사, 마법사, 궁수와 같은 다양한 캐릭터가 포함된 게임을 만들 때 단일 상속을 사용할 수 있습니다. 이 모든 캐릭터는 체력 포인트, 공격력 및 이동 속도와 같은 몇 가지 공통 속성과 동작을 공유합니다. 단일 상속을 사용하면 공통 특성과 동작을 포함하는 Character라는 기본 클래스를 만들고 여기에서 각 문자 클래스를 파생시켜 고유한 기능을 추가할 수 있습니다.

다중 상속에서는 하나의 파생 클래스가 여러 기본 클래스에서 상속될 수 있습니다. 이는 클래스가 둘 이상의 직계 상위 클래스를 가질 수 있음을 의미합니다. 결과적으로 파생 클래스는 각 기본 클래스의 모든 공용 및 보호 데이터 멤버와 멤버 함수를 상속합니다.

다음은 다중 상속의 예입니다.

// 기본 클래스 1

클래스 모양 {

공공의:

가상 이중 영역() = 0;

};

// 기본 클래스 2

클래스 색상 {

공공의:

가상 std::string getColor() = 0;

};

// 파생 클래스

Rectangle 클래스 : 공개 모양, 공개 색상 {

공공의:

이중 영역() 재정의 {

반환 너비 * 높이;

}

std::string getColor() 재정의 {

반환 색상;

}

사적인:

이중 폭 = 5.0;

이중 높이 = 3.0;

표준::문자열 색상 = "파란색";

};

이 예제에는 각각 가상 기능이 있는 두 개의 기본 클래스인 Shape 및 Color 가 있습니다 .그런 다음 Shape와 Color 모두에서 상속되는 파생 클래스Rectangle을 정의합니다.Rectangle은 자체 구현을 제공하기 위해 두 기본 클래스의 가상 함수를 재정의합니다.Rectangle은 다중 상속을 사용하여 기본 클래스인 ShapeColor의 속성을 모두 상속하여 특정 색상과 영역이 있는 사각형을 만들 수 있습니다.

C++에서 다중 상속을 사용하는 경우

여러 기본 클래스의 기능을 결합하려는 경우 다중 상속을 사용합니다. 예를 들어 버튼, 확인란, 텍스트 상자와 같은 다양한 유형의 컨트롤이 필요한 GUI 응용 프로그램을 생각해 보십시오. 각 컨트롤 유형에는 기능과 동작이 있지만 사용자 이벤트 처리 및 텍스트 표시와 같은 일부 공통 기능도 공유합니다.

다중 상속을 사용하면 일반 기능을 포함하는Control 이라는 기본 클래스를 만들고 이 클래스에서 각 컨트롤 유형과 특정 기능을 포함하는 다른 기본 클래스를 파생시킬 수 있습니다.

계층적 상속에서는 단일 기본 클래스가 여러 파생 클래스에 의해 상속됩니다. 다중 상속과 마찬가지로 계층적 상속의 파생 클래스는 기본 클래스의 모든 공개 및 보호 데이터 멤버와 멤버 함수를 가져옵니다.

다음은 C++에서 계층적 상속 구현을 이해하는 데 도움이 되는 코드 스니펫입니다.

// 기본 클래스

클래스 동물 {

공공의:

가상 무효 makeSound() = 0;

};

// 파생 클래스 1

클래스 고양이 : 공개 동물 {

공공의:

무효 makeSound() 재정의 {

std::cout << "야옹" << std::endl;

}

};

// 파생 클래스 2

개 클래스 : 공개 동물 {

공공의:

무효 makeSound() 재정의 {

std::cout << "우프" << std::endl;

}

};

이 예제에는 가상 함수 makeSound()가 있는 Animal 이라는 기본 클래스가 있습니다 .그런 다음Animal 에서 상속되는 CatDog두 파생 클래스를 정의합니다 . 각 파생 클래스는 자체 구현을 제공하기 위해makeSound() 함수를 재정의합니다.계층적 상속을 사용하여 소리를 내는 것과 같은 일반적인 행동을 공유하는 다양한 유형의 동물을 만들 수 있습니다.

C++에서 계층적 상속을 사용하는 경우

공통 기능을 공유하는 여러 파생 클래스를 만들려는 경우 계층적 상속을 사용합니다. 예를 들어 저축 계좌, 당좌 예금 계좌 및 신용 카드 계좌와 같은 다양한 유형의 계좌가 필요한 은행 애플리케이션을 생각해 보십시오. 이러한 모든 계정 유형은 계정 번호, 잔액 및 이자율과 같은 몇 가지 공통 속성 및 동작을 공유합니다.

계층적 상속을 사용하면 공통 특성과 동작을 포함하는 Account라는 기본 클래스를 만들고 여기에서 각 계정 유형을 파생시켜 고유한 기능을 추가할 수 있습니다.

다단계 상속

C++의 다단계 상속은 파생 클래스가 다른 파생 클래스에 의해 상속되는 상속 유형입니다. 이 시나리오에서 파생 클래스는 직계 부모 클래스의 모든 공개 및 보호 데이터 멤버와 멤버 함수를 상속하며, 이 클래스는 자체 부모 클래스 등에서 상속합니다.

C++에서 다단계 상속을 프로그래밍 방식으로 구현하는 방법은 다음과 같습니다 .

// 기본 클래스

클래스 차량 {

공공의:

무효 시작() {

std::cout << "차량이 시작 중입니다." << std::endl;

}

};

// 중급 클래스

자동차 등급 : 공용 차량 {

공공의:

무효 드라이브() {

std::cout << "자동차가 운전 중입니다." << std::endl;

}

};

// 파생 클래스

클래스 SportsCar : 공용 자동차 {

공공의:

무효 가속() {

std::cout << "스포츠카가 가속 중입니다" << std::endl;

}

};

C++에서 다단계 상속을 사용하는 경우

다른 파생 클래스에서 상속하고 해당 기능을 추가하는 파생 클래스를 만들려는 경우 다단계 상속을 사용합니다. 예를 들어 자동차, 트럭 및 오토바이와 같은 다양한 유형의 차량이 필요한 소프트웨어 시스템을 고려하십시오. 이러한 차량 유형은 속도, 가속 및 제동과 같은 몇 가지 공통 속성과 동작을 공유합니다.

다단계 상속을 사용하면 공통 특성과 동작을 포함하는 Vehicle 이라는 기본 클래스를 만들고 여기에서 CarTruck과 같은 중간 클래스를 파생시켜 특정 기능을 추가할 수 있습니다. 그런 다음Car 클래스 에서 SportsCar 클래스를파생시켜 고유한 기능을 추가할 수 있습니다.

하이브리드 상속은 둘 이상의 상속 유형의 조합입니다. 가상 상속이라고도 하는 하이브리드 상속의 파생 클래스는 여러 기본 클래스에서 상속되며 그 중 일부는 여러 경로를 통해 상속됩니다. 이로 인해 복잡한 상속 계층이 생성될 수 있으며 이해 및 유지 관리가 어려울 수 있습니다.

upGrad의소프트웨어 개발 과정을확인하여기술을 향상시키십시오.

다음은 C++에서 하이브리드 상속 의 예입니다 .

// 기본 클래스 1

클래스 동물 {

공공의:

가상 무효 makeSound() = 0;

};

// 기본 클래스 2

클래스 캔플라이 {

공공의:

가상 무효 플라이() = 0;

};

// 기본 클래스 3

클래스 CanSwim {

공공의:

가상 무효 수영() = 0;

};

// 파생 클래스

클래스 박쥐 : 공개 동물, 공개 CanFly {

공공의:

무효 makeSound() 재정의 {

std::cout << "비명!"<< std::endl;

}

무효 플라이() 재정의 {

std::cout << "박쥐가 날고 있다" << std::endl;

}

};

// 파생 클래스

클래스 펭귄 : 공개 동물, 공개 CanSwim {

공공의:

무효 makeSound() 재정의 {

std::cout << "훅!"<< std::endl;

}

무효 수영() 재정의 {

std::cout << "펭귄이 헤엄치고 있다" << std::endl;

}

};

인기 있는 소프트웨어 엔지니어링 과정 살펴보기

LJMU 및 IIITB의 컴퓨터 과학 석사 Caltech CTME 사이버 보안 인증 프로그램
풀스택 개발 부트캠프 블록체인의 PG 프로그램
풀 스택 개발의 임원 PG 프로그램
아래에서 모든 코스 보기
소프트웨어 엔지니어링 과정

C++에서 하이브리드 상속을 사용하는 경우

앞에서 설명한 네 가지 유형의 상속 외에도 하이브리드 상속은 여러 유형의 상속이 필요한 특정 시나리오에서 유용할 수 있습니다. 하이브리드 상속을 사용하여 다중 상속 유형의 이점을 결합합니다.

예를 들어, 다른 유형의 동물이 필요한 소프트웨어 시스템을 고려하십시오. 그 중 일부는 날 수 있고 다른 동물은 수영할 수 있습니다. 하이브리드 상속을 사용하여 Animal 이라는 기본 클래스를 만들고 여기에서 두 개의 중간 클래스인 CanFlyCanSwim 을파생시킬 수 있습니다. 마지막으로 하이브리드 상속을 사용하여 두 중간 클래스에서Bat Penguin클래스를 파생시킬 수 있습니다 . Bat 클래스는Animal CanFly에서 상속되고 Penguin 클래스Animal CanSwim에서 상속됩니다. 이런 식으로 고유한 능력 조합을 가진 다양한 유형의 동물을 만들 수 있습니다.

C++의 하이브리드 상속은 여러 유형의 상속이 필요한 복잡한 소프트웨어 시스템에서 유용할 수 있습니다. 그러나 이해하고 유지하기 어려울 수 있는 복잡한 상속 계층 구조를 만들 수도 있습니다. 다른 유형의 상속과 마찬가지로 특정 소프트웨어 개발 프로젝트 요구 사항 및 디자인 목표에 적합한 유형을 선택하는 것이 중요합니다.

소프트웨어 개발과 관련된 인기 기사 읽기

무료 기술 과정을확인하여 경쟁에서 우위를 점하십시오.

상속을 사용할 때 명심해야 할 중요한 사항:

상속은 C++의 강력한 메커니즘이지만 구현할 때 고려해야 할 몇 가지 요소도 있습니다.

  1. 깊은 상속 계층 구조 피하기 : 깊은 상속 계층 구조는 읽고 이해하고 유지하기 어려운 코드로 이어질 수 있습니다.상속 계층 구조를 가능한 한 얕게 유지하여 코드 가독성과 유지 관리성을 향상시키십시오.
  2. 액세스 수정자를 현명하게 사용: 액세스 수정자(공용, 보호 및 개인)는 클래스의 데이터 멤버 및 멤버 함수의 가시성을 제어합니다.클래스 외부에서 볼 수 없어야 하는 구현 세부 정보를 노출하지 않도록 현명하게 사용하십시오.
  3. 다이아몬드 상속 방지: 다이아몬드 상속은 클래스가 동일한 기본 클래스에서 상속되는 두 클래스에서 상속될 때 발생합니다.이로 인해 모호성이 발생할 수 있으며 일반적으로 피하는 것이 가장 좋습니다.
  4. 상속의 남용 방지: 상속이 유용할 수 있지만 남용하지 않는 것이 중요합니다.경우에 따라 컴포지션 또는 기타 디자인 패턴이 더 나은 선택일 수 있습니다.

소프트웨어 개발 무료 과정 살펴보기

클라우드 컴퓨팅의 기초 처음부터 JavaScript 기본 사항 데이터 구조 및 알고리즘
블록체인 기술 초보자를 위한 반응 핵심 자바 기초
자바 초보자를 위한 Node.js 고급 자바스크립트

테이크아웃

요약하면 상속은 모든 프로그래밍 학생이 마스터해야 하는 C++ 프로그래밍의 중요한 개념입니다. 다양한 유형의 상속과 사용 사례를 이해하면 효율적이고 조직적이며 유지 관리 가능한 코드를 생성하여 더 나은 소프트웨어 개발자가 될 수 있습니다.

이 기사가 흥미로웠다면 IIIT Bangalore와 협력하여 제공되는 upGrad의 DevOps 인증 프로그램 에 등록하여 소프트웨어 개발 지식을 더욱 향상시킬 수 있습니다 . 이 프로그램은 코딩, 테스트 및 배포를 포함하여 소프트웨어 개발의 다양한 측면을 다루며 업계에서 숙련된 소프트웨어 개발자가 되도록 도울 수 있습니다.

C++ 프로그래밍에서 상속이 중요한 이유는 무엇입니까?

상속을 활용하면 프로그래머는 복잡한 소프트웨어 시스템을 체계적으로 구축하기 위해 소프트웨어 개발에 드는 시간과 노력을 절약할 수 있습니다. 프로그래머가 더 읽기 쉬운 코드를 만들기 위해 노력함에 따라 코딩 프로세스는 다양하게 단순화됩니다.

C++ 프로그래밍에서 상속을 사용할 때 기억해야 할 중요한 사항은 무엇입니까?

C++ 프로그래밍에서 상속을 사용할 때 깊은 상속 계층 구조 피하기, 액세스 한정자를 현명하게 사용하기, 다이아몬드 상속 피하기, 상속을 과도하게 사용하지 않기 등 몇 가지 중요한 사항을 염두에 두는 것이 중요합니다.

내 소프트웨어 개발 프로젝트에 어떤 유형의 상속을 사용해야 합니까?

올바른 유형의 상속을 선택하는 것은 특정 소프트웨어 개발 프로젝트 요구 사항 및 디자인 목표에 따라 다릅니다. 다양한 종류의 상속 중에서 선택하는 것은 전적으로 프로젝트 요구 사항에 따라 다릅니다. 따라서 진행하기 전에 자세한 분석을 수행하십시오.