# 상속 (Inheritance)
# 오버로딩(Overloading)과 오버라이딩(Overriding)
# 가상함수, 순수가상함수 (Virtual Function, Pure Virtual Function)
# 멤버이니셜라이저 (Memeber Initializer)
오늘은 상속(Inheritance)에 대해서 복습을 하겠습니다.
상속
이 무엇인가?
'객체지향 프로그래밍' 에서 항상 강조를 하고 중요한 요소인 '상속'에 대해 알아보도록합시다.
상속은
무언가를 물려 받는 행위이다.
상속받는다
그렇단다.
중간쯤 보면 재산상속이있다.
그렇다면 컴퓨터, 그러니깐 프로그래밍에서 상속이란 어떻게 하는것이고, 왜 사용하는것인가?
어떻게 사용하는지부터 알아보자.
# 어떻게 사용?
class 클래스이름 : 접근제어자 상속받으려는클래스 {
};
여기서 접근제어자를 붙이는데요
public 상속
protected 상속
private 상속
세가지가있습니다.
public 상속
- 부모의 public, protected가 변경없이 그상태 그대로 상속받습니다.
protected 상속
- 부모의 public, protected가 protected로 바뀌어 상속받습니다.
private 상속
- 부모의 public, protected 멤버들이 전부 private로 상속받습니다.
간단히 말해서
접근제어자 보다 넓은 모든 멤버는 해당 접근제어자로 바뀌어서 상속을 받습니다.
priavte로 상속을 받게된다면
모든 멤버들이 private으로 바뀌게 되겠죠?
이렇게 된다면 상속을 하는의미가 사라집니다.
대부분 public으로 상속받기 마련입니다.
또한 생성자와 소멸자의 호출 순서인데요
생성자 : 부모클래스 -> 자식클래스 순서
소멸자 : 자식클래스 -> 부모클래스 순서
꼭 기억 해주세요
http://algobomyun.tistory.com/263 님 블로그를 참고하였습니다.
# 왜 사용?
class Sonata { public: Sonata() { door = 4; wheel = 4; color = "white"; } private: int door; int wheel; string color; }; class Avante { public: Avante() { door = 4; wheel = 4; color = "red"; } private: int door; int wheel; string color; }; class Morning { public: Morning() { door = 4; wheel = 4; color = "blue"; } private: int door; int wheel; string color; };
class Car { public: Car() { door = 4; wheel = 4; color = "black"; } int GetDoor() { return door; } int GetWheel() { return wheel; } string GetColor() { return color; } protected: int door; int wheel; string color; }; class Sonata : public Car { public: Sonata() { color = "white"; } }; class Avante : public Car { public: Avante() { color = "red"; } }; class Morning : public Car { public: Morning() { door = 2; color = "blue"; } }; int main() { Car *sonata = new Sonata(); Car *avante = new Avante(); Car *morning = new Morning(); std::cout << "sonata Door : " << sonata->GetDoor() << std::endl; std::cout << "sonata Wheel : " << sonata->GetWheel() << std::endl; std::cout << "sonata Color : " << sonata->GetColor() << std::endl; std::cout << std::endl; std::cout << "avante Door : " << avante->GetDoor() << std::endl; std::cout << "avante Wheel : " << avante->GetWheel() << std::endl; std::cout << "avante Color : " << avante->GetColor() << std::endl; std::cout << std::endl; std::cout << "morning Door : " << morning->GetDoor() << std::endl; std::cout << "morning Wheel : " << morning->GetWheel() << std::endl; std::cout << "morning Color : " << morning->GetColor() << std::endl; return 0; }
상속을 이용하면 수정해야 할 일이 적어지고, 타자를 치는 횟수도 줄어들겠습니다.
1. 코드의 재사용성이 높아집니다.
2. 유지 보수가 용이해집니다.
부족한점이 많습니다!
댓글로 지적해주시면 감사하겠습니다.
[깨달은점]
1. 상속이 편리하구나
2. 편리한만큼 설계를 잘해야겠구나
'복습 > C++' 카테고리의 다른 글
[C++] 복습일지 inline함수 그리고 virtual (0) | 2018.01.24 |
---|---|
[C++] 복습일지 part 2 - 4 #멤버 이니셜라이저 (0) | 2018.01.21 |
[C++] 복습일지 part 2 - 3 #가상함수, 순수가상함수 (0) | 2018.01.14 |
[C++] 복습일지 part 2 - 2 #오버로딩(Overloading)과 오버라이딩(Overriding) (0) | 2018.01.14 |
[C++] 복습일지 part 1 (0) | 2018.01.07 |