반응형

[들어가기 전]

 

상속이란 기존에 존재하는 클래스로부터 속성과 동작을 이어받고 자신이 필요한 기능을 추가하는 기법이다.


[설명]

 

상속이란 이미 존재하는 클래스로부터 멤버들을 물려받는 것이다. 이미 존재하는 클래스를 부모 클래스(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;
}

 

반응형
Posted by tislqhf

블로그 이미지
개인적인 공부자료 정리하는 공간
tislqhf

태그목록

공지사항

Yesterday
Today
Total

달력

 « |  » 2025.2
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

글 보관함