찾다
  • 로그인
  • 가입
비밀번호 재설정 성공

당신이 관심을 갖고 있는 프로젝트를 팔로우하고 그들에 관한 최신 뉴스를 맛보세요

C++ 상속

객체 지향 프로그래밍에서 가장 중요한 개념 중 하나는 상속입니다. 상속을 사용하면 다른 클래스를 기반으로 클래스를 정의할 수 있으므로 애플리케이션을 더 쉽게 만들고 유지 관리할 수 있습니다. 이는 또한 코드 기능을 재사용하고 실행 시간을 향상시키는 효과를 얻습니다.

클래스를 생성할 때 새 데이터 멤버와 멤버 함수를 다시 작성할 필요가 없으며 새 클래스가 기존 클래스의 멤버를 상속하도록 지정하기만 하면 됩니다. 이 기존 클래스를 기본 클래스라고 하고 새 클래스를 파생 클래스라고 합니다.

상속은 is 관계를 나타냅니다. 예를 들어, 포유류는 동물이고 개는 포유류이므로 개는 동물입니다.

기본 클래스 및 파생 클래스

클래스는 여러 클래스에서 파생될 수 있습니다. 즉, 여러 기본 클래스에서 데이터와 함수를 상속받을 수 있습니다. 파생 클래스를 정의하려면 클래스 파생 목록을 사용하여 기본 클래스를 지정합니다. 클래스 파생 목록은 하나 이상의 기본 클래스 이름을 따서 명명되고 다음 형식을 갖습니다.

class derived-class: access-specifier base-class

여기서 액세스 한정자 access-specifier는 public, protected 또는 private 중 하나이고 base-class는 이전에 정의된 것입니다. 수업의 이름입니다. 액세스 지정자를 사용하지 않는 경우 기본값은 비공개입니다.

기본 클래스 Shape가 있다고 가정하고, Rectangle은 아래와 같이 파생 클래스입니다.

#include <iostream>
 
using namespace std;

// 基类
class Shape 
{
   public:
      void setWidth(int w)
      {
         width = w;
      }
      void setHeight(int h)
      {
         height = h;
      }
   protected:
      int width;
      int height;
};

// 派生类
class Rectangle: public Shape
{
   public:
      int getArea()
      { 
         return (width * height); 
      }
};

int main(void)
{
   Rectangle Rect;
 
   Rect.setWidth(5);
   Rect.setHeight(7);

   // 输出对象的面积
   cout << "Total area: " << Rect.getArea() << endl;

   return 0;
}

위 코드를 컴파일하고 실행하면 다음과 같은 결과가 생성됩니다.

Total area: 35

액세스 제어 및 상속

파생 클래스는 기본 클래스의 비공개 멤버가 아닌 모든 멤버에 액세스할 수 있습니다. 따라서 파생 클래스의 멤버 함수에서 기본 클래스 멤버에 액세스하지 않으려면 기본 클래스에서 private으로 선언해야 합니다.

다음과 같이 액세스 권한에 따라 다양한 액세스 유형을 요약할 수 있습니다.

파생 클래스yesyesno외부 클래스yesnono

파생 클래스는 다음 경우를 제외하고 모든 기본 클래스 메서드를 상속합니다.

  • 기본 클래스의 생성자, 소멸자 및 복사 생성자.

  • 기본 클래스에 대한 연산자가 오버로드되었습니다.

  • 기본 클래스의 Friend 함수입니다.

상속 유형

클래스가 기본 클래스에서 파생되면 기본 클래스는 public, protected 또는 private로 상속될 수 있습니다. 상속된 유형은 위에서 설명한 액세스 지정자를 통해 지정됩니다.

우리는 protected 또는 private 상속을 거의 사용하지 않으며 일반적으로 public 상속을 사용합니다. 다양한 유형의 상속을 사용하는 경우 다음 규칙을 따르세요.

  • 공개 상속(공개): 클래스가 public 기본 클래스에서 파생되면 기본 클래스의 public 멤버도 of입니다. 파생 클래스 Public 멤버, protected 기본 클래스 멤버도 protected 파생 클래스 멤버, private 기본 클래스 멤버는 파생 클래스에서 직접 액세스할 수 없지만 public protected 기본 클래스 액세스 멤버입니다.

  • 보호 상속: 클래스가 protected 기본 클래스에서 파생되면 기본 클래스의 public protected 멤버가 파생 클래스의 protected 멤버가 됩니다.

  • 개인 상속(개인): 클래스가 private기본 클래스에서 파생되면 기본 클래스의 publicprotected 멤버가 파생 클래스의 private 멤버가 됩니다.

다중 상속

다중 상속은 하위 클래스가 여러 부모 클래스를 가질 수 있으며 여러 부모 클래스의 특성을 상속한다는 의미입니다.

C++ 클래스는 여러 클래스에서 멤버를 상속할 수 있습니다. 구문은 다음과 같습니다.

class <派生类名>:<继承方式1><基类名1>,<继承方式2><基类名2>,…
{
<派生类类体>
};

그 중 액세스 수정자 상속 방법은 public, protected 또는 private 중 하나이며 각 기본 클래스를 수정하는 데 사용됩니다. 위와 같이 쉼표로 구분하세요. 이제 다음 예를 살펴보겠습니다.

#include <iostream>
 
using namespace std;

// 基类 Shape
class Shape 
{
   public:
      void setWidth(int w)
      {
         width = w;
      }
      void setHeight(int h)
      {
         height = h;
      }
   protected:
      int width;
      int height;
};

// 基类 PaintCost
class PaintCost 
{
   public:
      int getCost(int area)
      {
         return area * 70;
      }
};

// 派生类
class Rectangle: public Shape, public PaintCost
{
   public:
      int getArea()
      { 
         return (width * height); 
      }
};

int main(void)
{
   Rectangle Rect;
   int area;
 
   Rect.setWidth(5);
   Rect.setHeight(7);

   area = Rect.getArea();
   
   // 输出对象的面积
   cout << "Total area: " << Rect.getArea() << endl;

   // 输出总花费
   cout << "Total paint cost: $" << Rect.getCost(area) << endl;

   return 0;
}

위 코드를 컴파일하고 실행하면 다음과 같은 결과가 생성됩니다.

Total area: 35
Total paint cost: 50
핫 AI 도구
Undress AI Tool
Undress AI Tool

무료로 이미지를 벗다

AI Clothes Remover
AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undresser.AI Undress
Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

Stock Market GPT
Stock Market GPT

더 현명한 결정을 위한 AI 기반 투자 연구

인기 있는 도구
메모장++7.3.1
메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6
드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전
SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)