C++의 구조체 상속

Zeeshan Afridi 2023년10월12일
  1. C++에서 상속이란?
  2. C++의 상속 유형
  3. C++의 구조체 상속
C++의 구조체 상속

구조체와 클래스는 비슷하지만 개체 지향 프로그래밍에서 다른 클래스나 함수에 대한 액세스 가능성에 차이가 있습니다.

구조체는 기본적으로 공개로 지정되는 반면 클래스는 비공개입니다. 그리고 상속에서는 비공개로 지정된 클래스를 상속할 수 없습니다. 클래스를 public으로 수동으로 선언해야 하는 반면 구조체는 기본적으로 public이므로 쉽게 상속할 수 있습니다.

C++에서 상속이란?

상속은 객체 지향 프로그래밍의 핵심 개념 중 하나이며 그 이유는 코드 재사용성과 계층적 분류 생성을 향상시키기 때문입니다.

상속의 도움으로 일부 기본 작업을 수행하는 일부 기능을 정의하는 일반 클래스를 정의하고 해당 기능을 상속하는 다른 클래스로 확장할 수 있습니다. 다이어그램을 통해 이해해 봅시다.

cpp의 상속

이 예에서는 고양이가 있으며 둘 다 다른 동물이지만 결국 둘 다 동물 애완 동물 범주에 속합니다.

둘 다 기본 클래스라고도 하는 Pet 클래스에 저장할 수 있는 먹고, 자고, 걷는 것과 같은 일부 동일한 기능을 가지며, 소리 및 크기와 같은 특정 기능은 Dog 및 파생 클래스라고도 하는 Cat 클래스.

이러한 유형의 상속을 단일 상속이라고 합니다. 아래에서 하나씩 논의할 다른 유형이 있습니다.

코드 예:

#include <iostream>
using namespace std;

// Base class
struct Pet {
  void eat() { cout << "I can eat i am pet \n"; }
  void sleep() { cout << "I can sleep i am pet \n"; }
  void walk() { cout << "I can walk i am pet \n"; }
};
// Derived class
struct Cat : Pet {
  void sound() { cout << "I am a cat Meow Meow! \n"; }
};
// Derived class
struct Dog : Pet {
  void sound() { cout << "I am a dog Bark Bark! \n"; }
};

int main() {
  cout << "This is Cat's characteristics" << endl;

  Cat myCat;
  myCat.eat();
  myCat.sleep();
  myCat.walk();
  myCat.sound();

  cout << "\nThis is Dog's characteristics" << endl;

  Dog myDog;
  myDog.eat();
  myDog.sleep();
  myDog.walk();
  myDog.sound();
}

출력:

This is Cat's characteristics
I can eat i am pet
I can sleep i am pet
I can walk i am pet
I am a cat Meow Meow!

This is Dog's characteristics
I can eat i am pet
I can sleep i am pet
I can walk i am pet
I am a dog Bark Bark!

이 예에서 PetCatDog가 파생 클래스인 기본 클래스입니다. Pet은 고양이와 개의 일반적인 동작을 정의했으므로 코드 중복을 피하기 위해 모든 클래스에서 정의하지 않습니다.

DogCat은 이러한 일반적인 동작을 확장하고 자체 파생 클래스에서 특정 동작을 정의합니다.

DogCat 클래스에는 sound()라는 하나의 동작만 있고 다른 하나는 기본 클래스에서 가져옵니다. 그리고 이러한 파생 클래스의 목적은 기본 클래스의 다른 기능을 사용하는 것입니다.

C++의 상속 유형

C++는 다양한 유형의 상속을 지원하므로 시나리오에 따라 각각을 사용할 수 있는 개방형 선택을 제공합니다. 하나씩 살펴보겠습니다.

  1. 단일 상속
  2. 다중 상속
  3. 다단계 상속
  4. 계층적 상속
  5. 하이브리드 상속

단일 상속

단일 상속에는 하나의 기본 클래스와 하나의 파생 클래스가 있습니다. 이 유형은 이미 첫 번째 예에서 설명했습니다.

통사론:

class derivedClass_name : access_mode base_class {
  // body of the derived class
};

다중 상속

다중 상속에서는 둘 이상의 기본 클래스의 기능과 속성을 단일 파생 클래스로 상속할 수 있습니다.

다중 상속

통사론:

class derivedClass_name : access_mode base_class1,
                          access_mode base_class2,
                          ....{
  // body of the derived class
};

다단계 상속

모든 유형의 상속을 통해 기본 클래스에서 상속할 수 있지만 다단계 상속에는 그 이상의 것이 있습니다. 다단계 상속을 허용하여 파생 클래스에서 다른 하위 클래스로 상속할 수 있습니다.

다단계 상속

Animalspets는 기본 클래스이고 cat은 두 기본 클래스의 기능과 속성을 상속받은 파생 클래스입니다.

계층적 상속

계층적 상속에서는 계층의 단일 기본 클래스에서 둘 이상의 하위 클래스가 상속됩니다. 또한 하나의 기본 클래스에서 둘 이상의 파생 클래스가 생성됩니다.

이것은 고급 유형의 상속입니다.

계층적 상속

하이브리드 상속

하이브리드 상속이라는 이름으로 알려진 이 유형의 상속은 계층 및 다중 상속과 같은 더 다양한 유형의 상속으로 구성됩니다. 하이브리드 상속을 위해 모든 조합을 수행할 수 있습니다.

하이브리드 상속

이 예에서는 하이브리드 상속으로 만들어진 단일 및 계층적 상속의 두 가지 유형의 상속이 있습니다.

C++의 구조체 상속

C++에서 struct는 클래스와 유사하지만 약간의 차이점이 있는 구조를 정의하는 데 사용되는 키워드입니다. 구조체와 클래스의 핵심 차이점은 구조체의 멤버는 기본적으로 공용인 반면 클래스는 개인용이므로 보안 문제가 발생한다는 것입니다.

기능과 속성이 최종 사용자에게 숨겨지지 않기 때문에 구조는 그다지 안전하지 않습니다. 반면에 클래스는 최종 사용자로부터 프로그래밍 구현을 숨길 수 있기 때문에 안전합니다.

구조체의 일반 구문:

struct structureName {
  member1;
  member2;
  ..memberN;
};

상속은 객체 지향 프로그래밍의 핵심 기능이므로 구조에서도 이 기능을 사용할 수 있습니다. 구조를 사용한 상속에는 클래스 대신 struct 키워드가 필요합니다.

C++의 구조체 상속:

#include <iostream>
using namespace std;

// Base class
struct Pet {
  void eat() { cout << "I can eat i am pet \n"; }
};

struct Dog : Pet {
  void sound() { cout << "I am a dog Bark Bark! \n"; }
};

int main() {
  cout << "\nThis is Dog's characteristics" << endl;
  Dog myDog;
  myDog.eat();
  myDog.sound();
}

출력:

This is Dog's characteristics
I can eat i am pet
I am a dog Bark Bark!

구조체 이름 앞에 struct라는 단어를 사용했습니다. struct는 기본적으로 public이기 때문에 구조체 본문에 public이라는 단어를 사용하지 않았다는 것을 눈치채면 클래스와 비슷해 보입니다.

Zeeshan Afridi avatar Zeeshan Afridi avatar

Zeeshan is a detail oriented software engineer that helps companies and individuals make their lives and easier with software solutions.

LinkedIn

관련 문장 - C++ Struct