Latest web development tutorials

C ++ 상속

객체 지향 프로그래밍에서 가장 중요한 개념은 상속된다. 상속은 우리가 만들어 쉽게 응용 프로그램을 유지하게 다른 클래스 기준으로 클래스를 정의 할 수 있습니다. 이를 위해, 또한 코드 기능의 재사용 도달 실행 시간 결과를 향상시킨다.

당신이 클래스를 만들 때, 당신은 단순히 새로운 클래스가 될 수있는 클래스의 기존 멤버를 상속 지정, 데이터 멤버와 멤버 함수 새를 다시 작성할 필요가 없습니다. 기존클래스는 기본 클래스라고, 새로운 클래스는 파생 클래스라고합니다.

상속관계를 나타낸다.예를 들어, 포유 동물은 개는 포유 동물, 따라서, 개 등 동물이고,이고,이다.

및 파생 클래스의 기본 클래스

클래스은 여러 기본 클래스에서 데이터 및 기능을 상속 할 수 있음을 의미 하나 이상의 클래스로부터 도출 될 수있다. 파생 클래스를 정의합니다, 우리는 기본 클래스를 지정하는 파생 클래스 목록을 사용합니다. 하나 이상의 기본 클래스로 클래스 도출리스트는 다음과 같은 형태라는 :

class derived-class: access-specifier base-class

액세스 수정 액세스 지정보호 또는 개인하나, 공공 항에있어서,베이스 클래스는 클래스의 이름 앞에 정의된다. 아니 액세스 수정 액세스 지정자 경우 기본값은 비공개입니다.

다음과같이,기본 클래스모양이파생 클래스를사각 영역가정하자 :

#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

액세스 제어 및 상속

파생 클래스는 모든 비 개인 회원 기본 클래스에 액세스 할 수 있습니다. 당신이 원하는 경우 파생 클래스 액세스의 기본 클래스 멤버 함수의 멤버가 기본 클래스에 선언해야한다 그래서 비공개입니다.

우리는 다음과 같은 액세스의 타입에 따라 상이한 액세스 권한을 요약 할 수있다 :

访问publicprotectedprivate
同一个类yesyesyes
派生类yesyesno
外部的类yesnono

파생 클래스는 다음과 같은 경우를 제외하고, 모든 기본 클래스 메서드를 상속 :

  • 기본 클래스 생성자와 소멸자와 생성자를 복사합니다.
  • 기본 클래스의 오버로드 된 연산자.
  • 기본 클래스 함수의 친구.

상속의 종류

클래스가 상기베이스 클래스로부터 파생되는 경우,베이스 클래스가보호 또는 개인유형 public으로 상속된다. 위의 설명을 통해 지정 액세스 수정 액세스 지정자의 유형을 상속됩니다.

우리는 거의보호되지 사용하거나 개인상속은 일반적으로공공상속을 사용한다. 때 상속의 다른 유형, 다음과 같은 규칙을 따릅니다 :

  • 공공 상속 (공개) : 보호 된멤버 클래스가공용기본 클래스에서 파생 된 기본 클래스의공용멤버가 클래스의공용멤버를 유도, 기본 클래스의보호 된멤버는 파생 클래스, 기본클래스의 private멤버를 직접 유도 할 수없는 클래스 액세스하지만 기본클래스의공용보호부재를 호출함으로써 액세스 될 수있다.
  • (보호) 보호 상속 : 기본 클래스 보호에서파생 된클래스는기본클래스의공개보호 된멤버는 파생클래스의 보호 된멤버가 될 것이다.
  • 개인 상속 (개인) : 클래스가 기본 클래스에서 파생 된 경우 기본 클래스의 민간공공보호 된멤버는 파생 클래스의private멤버가 될 것입니다.

다중 상속

인 다중 상속, 서브 클래스는 하나 이상의 상위 클래스의 특성을 상속 한 개 이상의 부모 클래스를 가질 수 있습니다.

C ++ 클래스는 하나 이상의 클래스 멤버 다음 구문에서 상속 할 수 있습니다 :

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

액세스 수정 상속보호 또는 개인하나, 공공 항에있어서, 상기 한 바와 같이, 각 기본 클래스, 쉼표로 구분하여 각각의 기본 클래스를 장식하는 데 사용. 지금 우리가 다음 예를 살펴 보자 :

#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: $2450