C++에서 상속(Inheritance)은 객체 지향 프로그래밍의 핵심 개념 중 하나입니다. 이번 글에서는 부모 클래스인 Triangle(삼각형)과 자식 클래스인 Isosceles(이등변삼각형)를 만들어 상속이 실제로 어떻게 동작하는지 확인해 보겠습니다.
문제 정의
먼저 Triangle 클래스에는 해당 객체가 '삼각형'이라는 것을 출력하는 함수가 있고, 자식 클래스인 Isosceles에는 자신이 '이등변삼각형'임을 보여주는 함수와 함께 간단한 설명을 출력하는 두 개의 함수가 존재합니다. 또한 자식 클래스의 객체를 통해 부모 클래스의 함수도 호출할 수 있어야 합니다.
별도의 입력값은 필요하지 않으며, 객체를 생성한 뒤 함수들을 적절한 순서로 호출하기만 하면 됩니다.
예를 들어 trg라는 객체를 만들고, 다음과 같이 메서드를 호출한다고 가정해 봅시다.
Isosceles trg; trg.isosceles(); trg.description(); trg.triangle();
그렇다면 실행 결과는 아래와 같이 나타나야 합니다.
This is an isosceles triangle There are two sides are equal in an isosceles triangle This is a triangle
해결 접근 방법
이 문제는 다음 단계를 따라 해결할 수 있습니다.
triangle()함수를 public으로 가지는 첫 번째 클래스Triangle을 정의합니다.Triangle을 public 방식으로 상속받는Isosceles클래스를 정의하고, 그 안에isosceles()와description()두 개의 메서드를 구현합니다.
예제 코드
아래 구현 예제를 통해 더 쉽게 이해할 수 있습니다.
#include <iostream>
using namespace std;
class Triangle{
public:
void triangle(){
cout<<"This is a triangle" << endl;
}
};
class Isosceles : public Triangle{
public:
void isosceles(){
cout<<"This is an isosceles triangle" << endl;
}
void description(){
cout<<"There are two sides are equal in an isosceles triangle" << endl;
}
};
int main(){
Isosceles trg;
trg.isosceles();
trg.description();
trg.triangle();
}입력
Isosceles trg; trg.isosceles(); trg.description(); trg.triangle();
출력 결과
This is an isosceles triangle There are two sides are equal in an isosceles triangle This is a triangle
코드 설명
위 코드에서 주목할 점은 Isosceles trg; 문장 하나만으로 객체가 생성되었다는 것입니다. trg 객체는 자신의 멤버 함수인 isosceles()와 description()을 직접 호출할 수 있을 뿐만 아니라, 부모 클래스인 Triangle에 정의된 triangle() 함수도 별도의 변환 없이 곧바로 호출할 수 있습니다.
이것이 바로 public 상속의 힘입니다. 자식 클래스는 부모 클래스의 모든 public 및 protected 멤버를 물려받기 때문에, 코드의 재사용성을 높이고 계층적인 클래스 구조를 손쉽게 설계할 수 있습니다. 이처럼 상속은 실무에서 기능 확장과 유지보수에 매우 유용하게 활용됩니다.