C++에서 공개, 비공개 및 보호 상속의 차이점

Muhammad Adil 2024년2월16일
  1. C++의 기본 및 파생 클래스
  2. C++의 공개 상속
  3. C++의 보호된 상속
  4. C++의 개인 상속
C++에서 공개, 비공개 및 보호 상속의 차이점

상속은 객체 지향 프로그래밍의 기본 개념입니다. 클래스의 기능을 확장하는 데 도움이 됩니다. 상속을 통해 한 클래스에서 이미 작성되고 테스트된 코드를 재사용하고 다른 클래스에서 사용할 수 있으므로 시간을 절약하고 오류를 줄이며 프로그램 설계를 단순화할 수 있습니다.

상속은 클래스 간의 is-a 관계라고 할 수 있습니다. 예를 들어 자동차가 자동차라고 말하면 모든 자동차는 자동차이고 모든 자동차는 자동차라고 말하는 것입니다.

이 기사에서는 다음 세 가지 유형의 상속에 대해 설명합니다.

  1. 공공 상속
  2. 개인 상속
  3. 보호 상속

그러나 상속 유형에 대해 논의하기 전에 C++의 기본 및 파생 클래스 개념에 대해 논의할 것입니다.

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

기본 및 파생 클래스는 개체의 계층 구조를 만드는 데 사용됩니다. 원래 클래스를 기본 클래스라고 하고 다른 상속된 클래스는 파생 클래스로 간주됩니다.

기본 클래스는 필요한 경우 파생 클래스에서 재정의할 수 있는 모든 멤버에 대한 기본 구현을 제공합니다.

파생 클래스는 기본 클래스의 모든 비공개 멤버에 액세스할 수 있습니다. 따라서 파생 클래스의 멤버 함수가 기본 클래스 멤버에 액세스하지 못하도록 하려면 해당 기본 클래스 멤버를 기본 클래스에서 전용으로 만들어야 합니다.

C++의 공개 상속

공개 상속은 한 클래스가 다른 클래스의 기능이나 속성을 획득하는 상속 유형입니다. 상속 클래스가 상속 클래스의 확장 또는 특수화로 간주되는 is-a 관계의 구현으로 볼 수 있습니다.

클래스가 공용 기본 클래스에서 파생되면 기본 클래스의 공용 멤버는 파생 클래스의 공용 멤버가 되고 기본 클래스의 보호된 멤버는 파생 클래스의 보호된 멤버가 됩니다. 기본 클래스의 전용 멤버는 파생 클래스에서 쉽게 연결할 수 없지만 기본 클래스의 공용 및 보호 멤버에 대한 호출을 통해 검색할 수 있습니다.

#include <iostream>
using namespace std;
class Demo {
 private:
  int x = 56;

 protected:
  int y = 27;

 public:
  int z = 67;
  int getX() { return x; }
};
class PublicInheritance : public Demo {
 public:
  int getY() { return y; }
};
int main() {
  PublicInheritance sam;
  cout << "Private member = " << sam.getX() << endl;
  cout << "Protected member= " << sam.getY() << endl;
  cout << "Public member= " << sam.z << endl;
  return 0;
}

위에서 언급한 코드의 작동을 확인하려면 여기를 클릭하십시오.

C++의 보호된 상속

보호 상속은 기본 클래스가 보호되는 상속의 한 형태입니다. 즉, 파생 클래스는 기본 클래스의 모든 공용 및 보호 멤버를 보호 멤버로 가집니다.

보호된 기본 클래스에서 파생하면 특정 시나리오에서 이점이 있습니다. 예를 들어 관련 클래스 집합을 만들고 싶지만 내부용으로만 사용하기 때문에 공개하고 싶지 않은 경우에 적합한 솔루션입니다.

#include <iostream>
using namespace std;
class Demo {
 private:
  int x = 56;

 protected:
  int y = 27;

 public:
  int z = 67;
  int getX() { return x; }
};
class ProtectedInheritance : protected Demo {
 public:
  int getY() { return y; }
  int getZ() { return z; }
};
int main() {
  ProtectedInheritance sam;

  cout << "Protected member= " << sam.getY() << endl;
  cout << "Public member= " << sam.getZ() << endl;
  return 0;
}

위에서 언급한 코드의 작동을 확인하려면 여기를 클릭하십시오.

C++의 개인 상속

개인 상속은 파생 클래스가 개인 기본 클래스에서 상속하는 경우입니다. 이것은 모든 public 또는 protected 기본 클래스 멤버가 파생 클래스의 private 멤버가 됨을 의미합니다.

이는 상위 클래스의 기능 중 일부만 제공하는 하위 클래스를 생성하려는 경우에 유용할 수 있습니다.

#include <iostream>
using namespace std;
class Demo {
 private:
  int x = 56;

 protected:
  int y = 27;

 public:
  int z = 67;
  int getX() { return x; }
};
class PrivateInheritance : private Demo {
 public:
  int getY() { return y; }
  int getZ() { return z; }
};
int main() {
  PrivateInheritance sam;

  cout << "Protected member= " << sam.getY() << endl;
  cout << "Public member= " << sam.getZ() << endl;
  return 0;
}

위에서 언급한 코드의 작동을 확인하려면 여기를 클릭하십시오.

Muhammad Adil avatar Muhammad Adil avatar

Muhammad Adil is a seasoned programmer and writer who has experience in various fields. He has been programming for over 5 years and have always loved the thrill of solving complex problems. He has skilled in PHP, Python, C++, Java, JavaScript, Ruby on Rails, AngularJS, ReactJS, HTML5 and CSS3. He enjoys putting his experience and knowledge into words.

Facebook

관련 문장 - C++ Inheritance