English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
이 문서에서는 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로 선언해야 합니다.
접근 권한에 따라 다양한 접근 유형을 요약할 수 있습니다. 예를 들어:
접근 | public | protected | private |
---|---|---|---|
동일한 클래스 | yes | yes | yes |
상속 클래스 | yes | yes | no |
외부 클래스 | yes | no | no |
자식 클래스는 모든 기본 클래스 메서드를 상속하지만, 다음과 같은 경우는 예외입니다:
기본 클래스의 생성자, 소멸자 및 복사 생성자.
기본 클래스의 오버로드 연산자.
기본 클래스의 친구 함수.
当一个类派生自基类,该基类可以被继承为 public, protected 또는 private 수의 유형. 상속 유형은 위에서 설명한 접근 지정자 access-specifier로 지정된
우리는 거의 사용하지 않습니다. protected 또는 private 상속은 일반적으로 public 상속. 다양한 상속 유형을 사용할 때, 다음과 같은 규칙을 따릅니다:
public 상속(public):当一个类派生自public기본 클래스를 상속할 때, 기본 클래스의public멤버입니다.public멤버도 자식 클래스의protected멤버입니다.protected멤버도 자식 클래스의private멤버는 자식 클래스에서 직접 접근할 수 없지만, 기본 클래스의public와protected멤버를 통해 접근할 수 있습니다.
protected 상속(protected): 当一个类派生自protected기본 클래스를 상속할 때, 기본 클래스의public와protected멤버는 자식 클래스의protected멤버.
private 상속(private):当一个类派生自private기본 클래스를 상속할 때, 기본 클래스의public와protected멤버는 자식 클래스의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