English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

C++ 상속 접근 권한 제어(public, protected, private)

이 문서에서는 C++에서 상속 접근 권한 제어(public, protected, private)를 배울 것입니다. ++public 상속, protected 상속 및 private 상속을 사용하여 사용할 수 있습니다. 예제를 통해 어떻게 사용하는지 배울 것입니다.

다른 접근 지정자를 가진 기본 클래스에서 도입 클래스를 선언할 수 있습니다.클래스public상속protected 상속 또는 private 상속.

#include <iostream>
using namespace std;
class base
{
.... ... ....
};
class derived : access_specifier base
{
.... ... ....
};

주의:public, protected 또는 private 키워드를 사용하여 위 코드에서 사용된 access_specifier 대신 사용할 수 있습니다.접근 지시자)용어.

접근 제어와 상속

도입 클래스는 기본 클래스의 모든 비私有 멤버에 접근할 수 있습니다. 따라서 기본 클래스 멤버가 도입 클래스 멤버 함수에 의해 접근되지 않도록 하려면 기본 클래스에서 private로 선언해야 합니다.

접근 권한에 따라 다양한 접근 유형을 요약할 수 있습니다. 예를 들어:

접근publicprotectedprivate
동일한 클래스yesyesyes
상속 클래스yesyesno
외부 클래스yesnono

자식 클래스는 모든 기본 클래스 메서드를 상속하지만, 다음과 같은 경우는 예외입니다:

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

  • 기본 클래스의 오버로드 연산자.

  • 기본 클래스의 친구 함수.

상속 유형

当一个类派生自基类,该基类可以被继承为 public, protected 또는 private 수의 유형. 상속 유형은 위에서 설명한 접근 지정자 access-specifier로 지정된

우리는 거의 사용하지 않습니다. protected 또는 private 상속은 일반적으로 public 상속. 다양한 상속 유형을 사용할 때, 다음과 같은 규칙을 따릅니다:

  • public 상속(public):当一个类派生自public기본 클래스를 상속할 때, 기본 클래스의public멤버입니다.public멤버도 자식 클래스의protected멤버입니다.protected멤버도 자식 클래스의private멤버는 자식 클래스에서 직접 접근할 수 없지만, 기본 클래스의publicprotected멤버를 통해 접근할 수 있습니다.

  • protected 상속(protected): 当一个类派生自protected기본 클래스를 상속할 때, 기본 클래스의publicprotected멤버는 자식 클래스의protected멤버.

  • private 상속(private):当一个类派生自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 << "총 면적: " << Rect.getArea() << endl;
 
   // 총 비용 출력
   cout << "총 비용: $" << Rect.getCost(area) << endl;
 
   return 0;
}

위의 코드가 컴파일되고 실행될 때, 다음과 같은 결과가 생성됩니다:

총 면적: 35
총 비용: $2450