2024. 3. 17. 18:52 C++/공부
C++] 기초(17) - 상속(Inheritance)
[들어가기 전]
상속이란 기존에 존재하는 클래스로부터 속성과 동작을 이어받고 자신이 필요한 기능을 추가하는 기법이다.
[설명]
상속이란 이미 존재하는 클래스로부터 멤버들을 물려받는 것이다. 이미 존재하는 클래스를 부모 클래스(Parent Class)라고 하고 상속을 받는 클래스를 자식 클래스(Child Class)라고 한다. 상속을 나타낼 때 확장(Extend) 또는 파생(Derive)이라는 용어를 사용하는 이유도 상속을 하게 되면 멤버가 증가하기 때문이며, 부모 클래스로 올라갈수록 멤버는 줄어든다.
<상속을 지칭하는 다양한 단어들>
- Parent Class : 부모클래스/조상클래스/슈퍼클래스/베이스클래스/기반클래스 등
- Child Class : 자식클래스/자손클래스/서브클래스/파생클래스 등
상속을 활용하면 이미 작성 및 검증된 소프트웨어를 재사용 할 수 있으며, 신뢰성 있는 소프트웨어를 손쉽게 개발 및 유지 보수할 수 있다. 또한 코드의 중복을 줄일 수 있으며, 전체적으로 코드의 양(열)의 크기가 작아진다.
[상속(Inheritance)의 특징]
1) 자식 클래스로 내려 갈수록 멤버가 증가한다.
2) 부모 클래스로 올라 갈수록 멤버가 감소한다.
3) 방향이 일방향성이다.
- 자식 클래스는 부모 클래스의 멤버에 접근이 가능하다.
- 부모 클래스는 자식 클래스의 멤버에 접근이 불가하다.
4) 부모 클래스의 멤버 함수를 자식 클래스에 맞게끔 재정의 가능하다.
- 메서드 오버라이딩(Method Overriding).
※ 메서드 오버로딩과 혼동하지 말 것.
5) 개발 시간을 절약하고, 신뢰성을 높이고 버그를 줄여주는 중요한 기법이다.
7) Is-a 관계에서는 상속을 권장하며, Has-a 관계에서는 상속을 권장하지 않는다.
- Is-a : 강아지(자식)는 동물(부모)이다.
- Has-a : 책(자식X)은 도서관(부모X)에 있다.
6) 생성자는 부모클래스 → 자식클래스 순서로 호출된다.
7) 소멸자는 자식클래스 → 부모클래스 순서로 호출된다.
8) 부모 클래스의 생성자는 상속이 되지 않으며, 상속받은 클래스 생성 시,
부모 클래스의 생성자가 호출될 뿐이다.
- 그렇다면 부모 클래스의 생성자 중 매개변수가 있는 생성자는 어떻게 호출?
: class Parent(int n1, int n2) 생성자를 호출하고 싶을 경우
→ class Child(Float f1, Float f2) : Parent(10, 20) { ... } 방식으로 호출 가능
[상속(Inheritance)의 예제]
#pragma once
#include <string>
using namespace std;
class Car
{
private:
int m_nSpeed;
public:
void SetSpeed(int nSpeed);
int GetSpeed();
};
class SportsCar : public Car
{
private:
bool m_bTurbo;
public:
void SetTrubo(bool bTurbo);
bool GetTurbo();
}
int main()
{
SprotsCar car;
car.SetSpeed(100); // 부모의 메서드
car.SetTrubo(true); // 자식의 메서드
car.GetSpeed(); // 부모의 메서드
car.GetTrubo(); // 자식의 메서드
return 0;
}
'C++ > 공부' 카테고리의 다른 글
C++] 기초(18) - 함수 오버라이딩(Overriding) (0) | 2024.03.17 |
---|---|
C++] 기초(16) - 싱글톤(Singleton) 디자인 패턴 (0) | 2024.03.17 |
C++] 기초(15) - 정적 변수/함수(Static Variable/Func) (0) | 2023.09.27 |
C++] 기초(14) - 복사생성자(Copy Constructor) (0) | 2023.09.10 |
C++] 기초(13) - 소멸자(Destructor) (0) | 2017.11.25 |