C++ 상속 생성자

Muhammad Husnain 2024년2월15일
  1. C++의 상속
  2. C++에서 상속 구현
  3. C++의 생성자 상속
C++ 상속 생성자

이 문서는 C++의 상속 개념과 파생 클래스에서 기본 클래스의 생성자를 상속하는 방법에 대해 설명합니다.

C++의 상속

C++, 특히 객체 지향 프로그래밍에서 가장 기본적이고 널리 사용되는 개념은 상속입니다. 클래스를 다른 클래스의 자식 클래스로 정의할 수 있는 기능입니다.

이를 통해 일부 코드 기능을 재사용하고 구현 시간을 줄일 수 있습니다. 이를 통해 기본 클래스에서 파생 클래스로 기능과 속성을 파생시킬 수 있습니다.

  1. 기본 클래스 - 다른 클래스에서 속성과 기능을 사용하는 클래스를 기본 클래스라고 합니다. 때로는 수퍼 클래스라고도 합니다.
  2. 파생 클래스 - 다른 클래스의 속성과 기능을 가져오는 클래스를 파생 클래스라고 합니다. 때로는 하위 클래스라고도 합니다.

일부 차량의 예를 고려하십시오. 자동차, 버스, 트럭은 모두 자동차이며 이러한 자동차는 모두 공통된 특성이 있고 다른 것도 있습니다.

이 모든 것이 자동차이고 모든 자동차는 모두에게 균일한 몇 가지 기능을 가지고 있습니다. 이 모든 자동차에 대한 클래스를 생성하면 많은 코드 복제를 수행하게 됩니다.

이것은 아래 그림에 설명되어 있습니다.

계승

위의 이미지를 보면 모든 자동차가 동일한 기능을 가지고 있음을 알 수 있습니다. 이렇게 하면 코드가 세 번 중복됩니다.

코드 중복은 오류 가능성, 처리 시간 증가 등과 같은 다른 많은 문제를 낳습니다. 이러한 상황을 극복하기 위해 상속이 사용됩니다.

이 모든 기능으로 구성된 Automobile 클래스를 만들고 이 클래스로 나머지 클래스를 파생시킬 수 있습니다. 이를 통해 코드 중복을 줄이고 코드 재사용성을 높일 수 있습니다.

상속 솔루션

위의 이미지에서 중복 코드를 줄였으며 모든 기능이 모든 클래스에 포함되어 있음을 알 수 있습니다. 상속은 일반적으로 is-a 관계를 정의합니다.

예를 들어 자동차는 자동차 is-a, 원형 is-a 모양, 강아지 is-a 동물 등입니다.

C++에서 상속 구현

기본 클래스에서 하위 클래스를 파생시키려면 다음 구문을 따라야 합니다.

class derived - class - name : access - specifier base - class - name { .. }

이 액세스 지정자는 기본 클래스에서 기능을 상속하는 방법을 결정하는 데 사용됩니다. 모두가 필요한지 일부가 필요한지 여부는 액세스 지정자를 기반으로 결정됩니다.

public, private 또는 protected일 수 있습니다. 액세스 지정자를 지정하지 않으면 기본적으로 private입니다.

예시:

public
class Automobile {
 public:
  getFuelAmount();
  applyBrakes();
  startEngine();
  stopEngine();
} public class Car : public Automobile {
  pressHorn();
} public class Bus : public Automobile {
  pressHorn();
}

위의 코드에서 경적 소리가 모든 차량에 대해 다르기 때문에 두 파생 클래스에는 둘 다에 대해 균일하지 않은 기능이 하나만 있음을 알 수 있습니다. 따라서 파생 클래스에서 해당 함수를 만들고 나머지는 기본 클래스에 있습니다.

Shapes 클래스의 또 다른 예를 고려하십시오.

#include <iostream>
#include <string>
using namespace std;
class Shapes {
 public:
  int w;
  int h;
};
class Square : public Shapes {
 public:
  int getArea() { return w * h; }
};
int main() {
  Square s;
  s.w = 5;
  s.h = 5;
  cout << "Area: " << s.getArea() << endl;
  return 0;
}

출력:

Area: 25

C++의 생성자 상속

이전 예제에서 기본 클래스에서와 마찬가지로 파생 클래스에서도 함수와 속성이 상속됨을 알 수 있습니다. 그러나 기본 클래스 생성자를 호출해야 하는 경우 파생 클래스의 생성자에서 명시적으로 호출해야 합니다.

생성자는 자동으로 호출되지 않습니다. 아래의 예를 고려하십시오.

#include <iostream>
using namespace std;
class baseClass {
 public:
  baseClass() { cout << "In constructor: Base" << endl; }
};
class derivedClass : public baseClass {
 public:
  derivedClass() : baseClass() { cout << "In Constructor: derived" << endl; }
};
int main() {
  derivedClass d;
  cout << "In main" << endl;
}

출력:

In constructor: Base
In Constructor: derived
In main

C++11에서는 using-declaration을 사용하여 이 작업을 수행할 수 있습니다. using-declaration을 사용하면 기본 클래스에서 파생 클래스 함수를 사용할 수 있습니다.

위의 예는 다음과 같이 수정할 수 있습니다.

#include <iostream>
using namespace std;
class baseClass {
 public:
  baseClass() { cout << "In constructor: Base" << endl; }
};
class derivedClass : public baseClass {
  using baseClass::baseClass;

 public:
  derivedClass() { cout << "In Constructor: derived" << endl; }
};
int main() {
  derivedClass d;
  cout << "In main" << endl;
}

또한 동일한 출력을 얻을 것입니다.

In constructor: Base
In Constructor: derived
In main
Muhammad Husnain avatar Muhammad Husnain avatar

Husnain is a professional Software Engineer and a researcher who loves to learn, build, write, and teach. Having worked various jobs in the IT industry, he especially enjoys finding ways to express complex ideas in simple ways through his content. In his free time, Husnain unwinds by thinking about tech fiction to solve problems around him.

LinkedIn

관련 문장 - C++ Inheritance